Google CTemplate
在设计web开发方面,通常在展示页面方面需要做到数据逻辑与展示的分离,如果使用传统的cgi c方式,通过printf输出动态html,逻辑有点混乱,程序不够简洁,本人主要介绍使用Google CTemplate开源C++模板引擎。使用ctemplate可以产生html(contains javascript,css,etc),xml,json格式的内容。
CTemplate由两部分组成
1.模板
2.字典
1.模板
所谓模板,就是一些预先定义好的输出格式,模板中定义了四种输出规范,分别如下所示
a. 变量 使用{{VARIABLE}}这种方式去定义
b. 段落 使用{{#SEG}} {{/SEG}}这种方式去定义,段落有两种用途,
一种是显示或者隐藏某个段落,
另外一种是循环输出,ctemplate模板本身不支持循环,需要使用程序去多次输出。
c. 模板包含 和include类似,就是包含了其他模板(该模板独立存在于另外的模板文件.tpl中),使用方法跟段落类似,只是需要我们去设置包含模板的文件。
d. 注释行 {{!COMMENT}},注释行不会包含在字典中。
2.字典
所谓字典,就是一些键值映射关系,字典中的key对应到模板中的具体标记中(如果该标记在字典中存在的话),
如果在字典中没有找到模板对应的标记,那么该标记的值可以认为是空。(模板中的标记是大小写敏感的)
构建json模板
var userinfo_list= { "count":"{{COUNT}}", "result":"{{RESULT}}", {{#ERROR}} "errmsg":"{{ERR_MSG}}", {{/ERROR}} "userinfo_array":[ {{#USERINFO_LIST}} { "code": "{{CODE}}", "userid": "{{USRID}}", "sex": "{{SEX}}", "age": "{{AGE}}", "nickname": "{{NICKNAME}}", "province": "{{PROVINCE}}", "city": "{{CITY}}" }, {{/USERINFO_LIST}}] };
上面的模板包含了如下几部分
1.变量COUNT,RESULT,ERR_MSG,CODE,USRID,SEX,AGE,NICKNAME等
2.段落 ERROR,USERINFO_LIST(包括段落开始标记和段落结束标记)
输出程序如下所示
1 #include <stdlib.h> 2 #include <string> 3 #include <iostream> 4 #include <CTemplate/CTemplate.h> 5 6 using namespace std; 7 using namespace ctemplate; 8 9 int COUNT = 5; 10 11 void main() 12 { 13 TemplateDictionary dict("json"); 14 15 for(int i = 0; i < count;i++) 16 { 17 TemplateDictionary *dict1 = dict.AddSectionDictionary("USERINFO_LIST" ); 18 dict1->SetValue("CODE","200"); 19 dict1->SetValue("USRID","1"); 20 dict1->SetValue("SEX","m"); 21 dict1->SetValue("AGE","20"); 22 dict1->SetValue("NICKNAME","测试"); 23 dict1->SetValue("PROVINCE","广东"); 24 } 25 26 dict.SetIntValue("COUNT", count); 27 if(1) 28 { 29 dict.ShowSection( "USERINFO_LIST" ); 30 } 31 32 string output; 33 ctemplate::ExpandTemplate("./userinfo.tpl", ctemplate::DO_NOT_STRIP, &dict, &output); 34 std::cout << output; 35 return 0; 36 }
段落USERINFO_LIST被输出5次。
posted on 2012-07-18 17:09 ActiveChange 阅读(2087) 评论(0) 编辑 收藏 举报