标题
[html/mvc/Velocity]各种模板引擎
clq
浏览(0) +
2009-04-22 10:35:04 发表
编辑
关键字:
[html/mvc/Velocity]各种模板引擎 http://www.oschina.net/project/lang/21?tag=136 -------------------------------------------------- 模板引擎 共收录了 5 个 C/C++ 项目 —— 第 1 页 * 模板引擎 ctemplate ctemplate的设计哲学是轻量级,快速,且逻辑和界面分离,因此和ClearSilver和Teng是有一些差异的。比如Ctemplate就没有模板函数,没有条件判断和循环语句(当然,它可以通过变通的方式来实现)。 ctemplate大体上分为两个部分,一部分是模板,另一部分是数据字典。模板定义了界面展现的形式(V),数据字典就是填充模板的数据(M),你自己写业务逻辑去控制界面展现(C),典型的MVC模型。 ctemplate模板中有四中标记,对应的数... * PHP模板引擎 Blitz templates Blitz templates 是一个用C语言开发的快速的PHP模板引擎,它是作为一个PHP的扩展功能。它开始作为一个php_templates更换,但发展到更多的工作。它是基于可扩展的模板控制器(自定义视图类在PHP )和简单的逻辑。基准测试表明,这是最快的一个PHP的模板引擎,使Web应用程序更接近于一个聪明的MVC 结构模型,最大从您的代码分离出HTML。这是专为大高负荷的有许多复杂的演示文稿的逻辑的互联网项目。下图是几个模板的性能测试结... * 服务器端JavaScript GromJS GromJS 是一个服务器端的 JavaScript ,实现了 Mozilla SpiderMonkey 的 JavaScript 解释器。它提供了网页设计师和程序员能够使用JavaScript对象的代码用于创建动态网页和网站的脚本。这可以利用Web服务器上的对象来操纵文件和目录,以及处理客户端发送的数据或资料库,建立动态内容,或者为了实现购物篮。除了标准的 JavaScript对象,类,和职能, GromJS包括支持操纵文件, MySQL和PostgreSQL数据库、SQLite3数据库,会话变量... * 嵌入式Ruby eRuby eRuby 是一个Ruby的标准,也是一个程序的名字。eRuby让Ruby可以像PHP和ASP那样嵌入到HTML当中,很多程序都实现了eRuby标准,其中最常用的有Ruby默认捆绑的erb和eruby,前者是纯Ruby写的,后者是C语言编的程序,所以后者性能会比较高,并且eruby还实现了另外几个比较实用的功能 * Apache模板引擎 mod_spin mod_spin 是一个用C语言写的 Apache 模块,用来提供简单的模板语言功能,提供数据替换、应用持久化、会话跟踪、数据库连接池、动态链接、cookies、文件上传解析以及一些MVC的简单 API。它的语法跟 Velocity 非常类似,例如: #for(${reference}) some text within the loop and a ${reference.column} #end #if(${reference}) some text to replace if ${reference} is not NULL #else some text to repl...
clq
ctemplate的设计哲学是轻量级,快速,且逻辑和界面分离,因此和ClearSilver和Teng是有一些差异的。比如Ctemplate就没有模板函数,没有条件判断和循环语句(当然,它可以通过变通的方式来实现)。 ctemplate大体上分为两个部分,一部分是模板,另一部分是数据字典。模板定义了界面展现的形式(V),数据字典就是填充模板的数据(M),你自己写业务逻辑去控制界面展现(C),典型的MVC模型。 ctemplate模板中有四中标记,对应的数据字典也有不同的处理方式: * 变量,{{变量名}},用两个大括号包含的就是变量名,在c++代码中,可以对变量赋值,任何类型的值都可以(如字符,整数,日期等)。 * 片断,{{#片断名}},片断在数据字典中表现为一个子字典,字典是可以分级的,根字典下面有多级子字典。片断可以处理条件判断和循环。 * 包含,{{>模板名}}包含指的是一个模板可以包含其他模板,对应的也是一个字字典。 * 注释,{{!注释名}},包含注释。 一份演示了完整四种标记的例子如下: Hello {{NAME}}, You have just won ${{VALUE}}! {{#IN_CA}}Well, ${{TAXED_VALUE}}, after taxes.{{/IN_CA}} 处理的C++代码如下: #include #include #include #include int main(int argc, char** argv) { google::TemplateDictionary dict("example"); dict.SetValue("NAME", "John Smith"); int winnings = rand() % 100000; dict.SetIntValue("VALUE", winnings); dict.SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.83); // For now, assume everyone lives in CA. // (Try running the program with a 0 here instead!) if (1) { dict.ShowSection("IN_CA"); } google::Template* tpl = google::Template::GetTemplate("example.tpl", google::DO_NOT_STRIP); std::string output; tpl->Expand(&output, &dict); std::cout << output; return 0; }
clq
mod_spin 是一个用C语言写的 Apache 模块,用来提供简单的模板语言功能,提供数据替换、应用持久化、会话跟踪、数据库连接池、动态链接、cookies、文件上传解析以及一些MVC的简单API。 它的语法跟 Velocity 非常类似,例如: #for(${reference}) some text within the loop and a ${reference.column} #end #if(${reference}) some text to replace if ${reference} is not NULL #else some text to replace if ${reference} is NULL #end #unless(${reference}) some text to replace if ${reference} is NULL #else some text to replace if ${reference} is not NULL #end
clq
Ctemplate 是 google 的出品 http://blog.csdn.net/marising/archive/2008/10/13/3069346.aspx -------------------------------------------------- C++模板引擎Ctemplate的介绍收藏 C&C++的模板引擎相对比较少,比较有名的是ClearSilver和Teng,他们功能都比较强大,我需要一个轻量级的模板引擎Ctemplate ctemplate的设计哲学是轻量级,快速,且逻辑和界面分离,因此和ClearSilver和Teng是有一些差异的。比如Ctemplate就没有模板函数,没有条件判断和循环语句(当然,它可以通过变通的方式来实现)。 1.Ctemplate介绍 ctemplate大体上分为两个部分,一部分是模板,另一部分是数据字典。模板定义了界面展现的形式(V),数据字典就是填充模板的数据(M),你自己写业务逻辑去控制界面展现(C),典型的MVC模型。 ctemplate模板中有四中标记,对应的数据字典也有不同的处理方式: * 变量,{{变量名}},用两个大括号包含的就是变量名,在c++代码中,可以对变量赋值,任何类型的值都可以(如字符,整数,日期等)。 * 片断,{{#片断名}},片断在数据字典中表现为一个子字典,字典是可以分级的,根字典下面有多级子字典。片断可以处理条件判断和循环。 * 包含,{{>模板名}}包含指的是一个模板可以包含其他模板,对应的也是一个字字典。 * 注释,{{!注释名}},包含注释。 一份演示了完整四种标记的例子如下, 1. 2. 3. 4. {{NAME}} 5. 6. {{!This is a example of template.}} 7. 8. Hello {{NAME}}, 9. You have just won $${{VALUE}}! 10. 11. {{#IN_TABLE}} 12. 13. {{ITEM}} 14. {{TAXED_VALUE}} 15. 16. {{/IN_TABLE}} 17.
18. {{>INCLUDED_TEMPLATE}} 19. 20. 21. 22. 23. {{INCLUDE_VAR}} 24.
c++代码如下 1. #include 2. #include 3. #include 4. #include 5. int main(int argc, char** argv) { 6. TemplateDictionary dict("example"); 7. dict.SetValue("NAME", "John Smith"); 8. int winnings = random() % 100000; 9. dict.SetIntValue("VALUE", winnings); 10. TemplateDictionary *dict1 = dict.AddSectionDictionary("IN_TABLE"); 11. TemplateDictionary *dict2 = dict.AddSectionDictionary("IN_TABLE"); 12. dict1->SetValue("ITEM", "Lihaibo"); 13. dict1->SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.83); 14. dict2->SetValue("ITEM", "Qiyuehua"); 15. dict2->SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.73); 16. if (1) 17. { 18. dict.ShowSection("IN_TABLE"); 19. } 20. 21. TemplateDictionary *dict3 = dict.AddIncludeDictionary("INCLUDED_TEMPLATE"); 22. dict3->SetFilename("../tpl/ctInclude.tpl"); 23. dict3->SetValue("INCLUDE_VAR","This is a include template."); 24. 25. Template* tpl = Template::GetTemplate("../tpl/ctexample.tpl",nwsc::DO_NOT_STRIP); 26. std::string output; 27. tpl->Expand(&output, &dict); 28. std::cout << output; 29. Template::ClearCache(); 30. return 0; 31. } 注意: * 模板字典类似Key和Value的结构,对应的是变量名和值。 * 片断是可以有多条记录的,如果要显示列表,可以定义为片断,获取多条记录填充到字典中。 * 片断可以显示,也可以不显示。如果片断的字典有数据,显示。如果片断的字典没有数据,默认是不显示的,可以调用ShowSection来显示。 2.ctemplate高级 1. Modifier(修改器),意思变量的类型(html,js或者其他),会进行校验和编码处理,比如html类型会将&转换成&。类型有html,pre,url query,javascript,css和json。如果觉得在模板变量中定义这些麻烦,可以在加载模板是使用google::Template::GetTemplateWithAutoEscaping()方法,使用自动替换模式,指定是Html,js还是css。你可以编写你自己的modifier,来处理一些特殊的需求。 2. Strip(清除器),模板中有一些空行和空白字符,在加载时,可以指定参数,是否需要清除。如google::STRIP_BLANK_LINES,google::STRIP_WHITESPACE。 3. ExpandEmitter,在ctemplate中有这个接口,这个接口是在展开模板时,输出数据用的,默认实现了std::string版本的StringEmitter,这种方式是处理完毕后,才能发送到客户端,std::string性能并不高。如果你要一个高效率的Web服务器,则可以用流式的模式。比如自己实现 ExpandEmitter接口,实现数据流式发送到客户浏览器。 4. 字典copy,如果两个字典很类似,可以copy一个字典,然后修改,调用dict->MakeCopy()。
clq
google ctemplate库简介 在Java的世界里,代码生成有velocity,其vtl语言功能强大,能有效分离数据逻辑和显示。 linux下的web开发,动态页面生成很费周折,通常是 利用fastcgi接受请求,然后返回页面给请求端。 代码逻辑和显示逻辑写在一起,是一件很痛苦的事情,c++里也有一个类似java中velocity的东东。 它的名字叫 ctemplate,出自大名鼎鼎的google。目前最新版本是 0.8. 它有四种变量表达方式: 1,简单的值替换; 2,<#tag>和式的循环以及内嵌; 3,">file"式的include文件; 4,"!"开头的注释说明。 在c++里有了这个工具,能很大程度提高开发效率,方便不少。
clq
http://ctpp.havoc.ru/en/ http://code.google.com/p/google-ctemplate/ http://www.cppblog.com/zealsoft/archive/2008/09/17/62013.html 基于C++的模板引擎 模板引擎(Template engine)是实现模型和视图分离的一个重要手段。如果你从未接触过模板引擎可以看看Wiki的介绍。模板引擎的流行最初是因为网站开发的需要,象比较重要的几个模板引擎:SMARTY、Velocity、StringTemplate都是来源于网页设计的。当然,除了网页设计,模板引擎还可以应用于其他领域,而我主要将其应用与代码生成器的设计中。 有关模板引擎,我推荐StringTemplate的作者Terence Parr 写的一篇英文论文。Terence Parr是一个大学教授,写的文章自然学术性比较强,较难懂,但是很有参考价值。借助这篇文章的分析,我们可以发现当前模板引擎有着两种不同的思路:一种是严格将模型和视图分开的,设计模板系统时往往提供的模板语言比较简单,避免在模板语言中加入运算符号等,另一种是提供强大的模板语言功能,模板语言具有类似高级语言的功能,如各种条件判断语句,甚至数学运算能力。显然从模板编写者的角度看,后者具有更强大的功能,几乎无所不能,但是安全性不如前者,模板的编写者更容易利用系统漏洞做模板系统设计者没有想到的事情。这个问题仁者见仁,智者见智,好在由很多的模板系统可以选择。 绝大多数模板引擎都是支持Java、PHP、Python的,这当然和模板引擎的应用领域相关。我的代码生成器是用C++写的,而且必须支持Windows平台,所以选择的范围就比较有限了,从网络上搜索了一下,似乎只有Teng、CT++和Google CTemplate可以使用了。我对3个系统进行了简单的评估,并实际使用过CT++和CTemplate,现在总结一下自己的心得,希望对大家有一些帮助。 1、操作系统的支持 我的主要工作是在Windows上的,而模板引擎绝大多数是面向Unix/Linux的,这和我的需求有一定距离。当初曾经下载过Teng,但是折腾了半天也没有能够让其在Visual Studio 2003下成功编译,所以就放弃了,后来将CT++ 1.8简单地处理了一下就可以跑了,很开心。而Google CTemplate更提供了完全的Windows支持,这对于我这样的用户当然是非常省心了。 2、软件开发的活跃度 这些软件都是开源的,软件开发的活跃度当然是我关心的,有的工具刚开始用的时候很开心,但是后来开发者没有兴趣不玩了,而又没有人接手,BUG也无法更新了,就比较苦了,典型的象TurboPower。Teng似乎已经很长时间不更新了,CT++一直在更新,但是开发者是俄罗斯人,全部文档是俄文的,包括程序注释,以前1.8还有英文文档,从2.0以后就没有了,虽然最近承诺2.4以后会报告英文文档,但是我担心他哪天不高兴就不玩了,所以最后下定决心转到 CTemplate去了。CTemplate虽然是Google的,而且据说Google内部也在使用,但是在模板引擎领域的名气却不大,好像作者的热情仍然很高,持续更新,而且可能很快要升级到1.0版本了,这给我很大的信心。 3、模板语言的功能 在我看来,模板语言的功能越强,提供的函数越多,它可能越受模板编写者的欢迎,但是可能不符合模型和视图严格分离的原则。Teng和CT++都属于模板语言功能强的一类,象Teng甚至提供了大量的运算符,而CTemplate显然是严格按照模型和视图分离原则设计的,它甚至没有提供if/else这样在其他模板系统中都有的功能。如前所述,这个问题仁者见仁,智者见智,不争论了。下面简单地列个表比较一下。由于CT++ 2没有英文文档,一直就没有使用过,可能会遗漏一些新功能。 Teng CT++ CTemplate 变量 支持 支持 支持 函数 支持 支持 支持(Modifier) 包含 支持 支持 支持 条件语句 支持 支持 不支持 循环 支持 支持 支持 计算 支持 不支持 不支持 赋值 支持 不支持 不支持 注释 支持 支持 支持 安全性设计 不支持 不支持 支持 用户定义函数 不支持 支持 支持 4、C++ API 基本的API几个软件都差不多,我觉得CTemplate更完善一些,特别喜欢它的调试功能。 总体来说,我对CT++还是有些难舍,但是综合考虑之后还是决定转到CTemplate上。
clq
FeedBack: # re: 基于C++的模版引擎 2008-09-22 11:58 | 唐新发 还有一个可以考虑一下:ClearSilver 回复 更多评论 # re: 基于C++的模版引擎 2008-09-22 16:03 | zealsoft @唐新发 ClearSilver 也是一个不错的选择。 回复 更多评论
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.