6、关于ctemplate的一个例子

简介: 1、显示循环时,可以使用{{#片断名}}。    模板字典类似Key和Value的结构,对应的是变量名和值。    片断是可以有多条记录的,如果要显示列表,可以定义为片断,获取多条记录填充到字典中。

1、显示循环时,可以使用{{#片断名}}

   模板字典类似KeyValue的结构,对应的是变量名和值。

   片断是可以有多条记录的,如果要显示列表,可以定义为片断,获取多条记录填充到字典中。

   片断可以显示,也可以不显示。如果片断的字典有数据,显示。如果片断的字典没有数据,默认是不显示的,可以调用ShowSection来显示。

2、一个结合了片断名,包含模板的示例

模板1

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif ctexample.tpl
<html>
<head>
<title> {{NAME}} </title>
</head>
{{!This is a example of template.}}
<body>
Hello {{NAME}},
You have just won ${{VALUE}}!
<table>
{{#IN_TABLE}}
<tr>
<td> {{ITEM}} </td>
<td> {{TAXED_VALUE}} </td>
</tr>
{{/IN_TABLE}}
</table>
{{>INCLUDED_TEMPLATE}}
</body>
</html>
<!--ctinclude.tpl-->
<div>
{{INCLUDE_VAR}}
</div>

模板2

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif example.tpl
Hello{{NAME}},
You have just won ${{VALUE}}!
{{#IN_CA}}
Well, ${{TAXED_VALUE}}, after taxes.
{{/IN_CA}}

逻辑代码

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
#include <stdlib.h>
#include
<string>
#include
<iostream>
#include
<ctemplate/template.h>

int main( int argc, char ** argv)
{
ctemplate::TemplateDictionary dict(
"ctexample");
dict.SetValue(
"NAME", "John Smith");
int winnings = random() % 100000;
dict.SetIntValue(
"VALUE", winnings);
ctemplate::TemplateDictionary
*dict1 = dict.AddSectionDictionary( "IN_TABLE" );
ctemplate::TemplateDictionary
*dict2 = dict.AddSectionDictionary( "IN_TABLE" );
dict1
->SetValue("ITEM", "Lihaibo");
dict1
->SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.83);
dict2
->SetValue("ITEM", "Qiyuehua");
dict.SetValue(
"INCLUDE_VAR", "Qiyuehua");
dict2
->SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.73);
if (1)
{
dict.ShowSection(
"IN_TABLE" );
}
ctemplate::TemplateDictionary
*dict3 = dict.AddIncludeDictionary("INCLUDED_TEMPLATE" );
dict3
->SetFilename("./example.tpl" );
dict3
->SetValue("INCLUDE_VAR" , "This is a include template.");
dict3
->SetValue("NAME", "MEEE");
dict3
->SetIntValue("VALUE", winnings);
dict3
->SetFormattedValue("TAXED_VALUE","%.2f", winnings *0.83);
if(1)
{
dict.ShowSection(
"IN_CA");
}
ctemplate::Template
* tpl = ctemplate::Template::GetTemplate("./ctexample.tpl", ctemplate::DO_NOT_STRIP);
std::
string output;
tpl
->Expand(&output, &dict);
std::cout
<< output;
ctemplate::Template::ClearCache();
return 0;
}

结果

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
<!--ctexample.tpl-->
<html>
<head>
<title> John Smith </title>
</head>

<body>
Hello John Smith,
You have just won $
89383!
<table>

<tr>
<td> Lihaibo </td>
<td> 74187.89 </td>
</tr>

<tr>
<td> Qiyuehua </td>
<td> 65249.59 </td>
</tr>

</table>
HelloMEEE,
You have just won $
89383!


</body>
</html>
<!--ctinclude.tpl-->
<div>
Qiyuehua
</div>

参考

1http://www.blogjava.net/xiaomage234/archive/2007/12/24/170174.html

2http://baike.baidu.com/view/5835966.htm

3http://zsulwj.blog.163.com/blog/static/35326925200811934454946/

4ctemplate安装包下载地址:

http://code.google.com/p/google-ctemplate/downloads/list

5】示例程序

http://code.google.com/p/google-ctemplate/

6http://hi.baidu.com/duanmuchun/blog/item/eab82273b1a8861b8701b0bd.html

目录
相关文章
|
Web App开发 XML 缓存
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(4)-会话面板和HTTP会话数据操作详解
【7月更文挑战第19天】Fiddler会话面板概览:Fiddler的会话列表显示HTTP请求的详细信息,包括ID、状态码、协议、主机名、URL、内容类型、大小、进程及自定义备注。颜色和图标标识状态,如红色表示错误,黄色为认证,蓝色是HTML响应。用户可右键列进行搜索、标记重复、隐藏或自定义列,如添加请求方法。通过界面或脚本可添加自定义列,如显示ServerIP。会话还可复制和保存,解决乱码问题需解码响应体。
200 0
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(4)-会话面板和HTTP会话数据操作详解
|
监控 前端开发 JavaScript
记录浏览器节能机制导致Websocket断连问题
近期,在使用WebSocket(WS)连接时遇到了频繁断连的问题,这种情况在单个用户上每天发生数百次。尽管利用了socket.io的自动重连机制能够在断连后迅速恢复连接,但这并不保证每一次重连都能成功接收WS消息。因此,我们进行了一些的排查和测试工作。
719 1
记录浏览器节能机制导致Websocket断连问题
|
Prometheus 监控 Cloud Native
Prometheus 查询语言(PromQL):深入解析
【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。
1558 2
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
1589 0
|
存储 SQL 关系型数据库
StarRocks简介
【5月更文挑战第4天】StarRocks是Linux基金会的开源MPP数据库,提供MySQL协议兼容性,支持标准SQL,用于快速数据分析。它适用于OLAP、实时数仓、高并发查询等场景,具有无外部依赖、高可用和易运维的特点。StarRocks支持多种BI工具,如Tableau,且可构建各种数据模型。其系统架构包括Frontend(FE)和Backend(BE),提供存算一体和存算分离两种模式。此外,StarRocks支持四种表类型和多种数据类型,满足不同业务需求。
1920 0
StarRocks简介
|
SQL 数据管理 数据挖掘
云版StarRocks操作手册
简要介绍阿里云版StarRocks EMR Serverless StarRocks 以及EMR Serverless StarRocks的操作
|
Dubbo Java 应用服务中间件
Dubbo 常见错误及解决方法
导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测、故障演练、JVM、应用容器、服务框架、流量调度、监控、诊断等多个技术领域,以更结构化的方式来打造稳定性领域的知识库,欢迎您的加入。
5289 98
|
Java Maven
springboot 如何查看版本号之间的相互依赖:(一)
springboot 如何查看版本号之间的相互依赖:(一)
613 0
|
JavaScript 程序员 数据安全/隐私保护
Vue中自定义指令是什么?有哪些应用场景?
Vue中自定义指令是什么?有哪些应用场景?
180 0
|
存储 运维 Kubernetes
Kuberntes云原生实战一 高可用部署架构
Kuberntes云原生实战一 高可用部署架构
415 1