显示标签为“template system”的博文。显示所有博文
显示标签为“template system”的博文。显示所有博文

2008年6月17日星期二

Web.py模板系统的tips [2008-6-12]

在webpy的模板系统里,仅能使用由程序传过来的变量和类,以及一些基本的itorator语句,不直接支持在模板里使用python的语句。如下面webpy的模板里的range和len会被系统报错,称“range”和“len”没有被定义。对于这种情况,有人说不好,不方便;也有人说就是应该这样,表现逻辑应该和呈现逻辑就是要区分开来,不应该允许在模板中直接调用python代码。
<h1>$title</h1>
$ for x in range(len(itemlist)):
<li> $x </li>

但是,如果以上例子能使用range和len将会带来很大的便利而并不会mix up所谓的表现逻辑和呈现逻辑。该怎么办?在webpy的论坛了,我找到了答案;)
只要在“表现逻辑”里增加以下语句,你的“呈现逻辑”模板就再也不会报错啦!
web.template.Template.globals['len'] = len
web.template.Template.globals['range'] = range


后来又找到一个更强的用法:

web.template.Template.globals['py'] = web.storify(__builtins__)

这样,你就可以使用py.xxx的方式,使用python所有的语句和函数啦!

2008年6月6日星期五

又一个模板系统: Tenjin

在webpy的论坛上看到一个叫makoto kuwata的日本人, 介绍被他成为世界上最快的模板引擎(the fastest template engine in the world..),Tenjin。他的网站在这儿
根据介绍,该引擎有多个语言版本,java,php,ruby,当然也包括python。其速度比我常用的cheetach要快大约三倍,比Django的模板系统要快9倍等,详细的测试结果可以看下面:

MacOS X 10.4 Tiger, Intel CoreDuo 1.83GHz, Memory 2GB
Language Template Engine Test#1(sec) Test#2(sec)
Python(2.5.1) pyTenjin (0.6.1) 6.96 5.61
Cheetah (2.0) 20.36 19.82
Django (0.9.5) 71.33 59.80
Myghty (1.1) 107.88 19.30
Kid (0.9.6) 380.24 378.96
Genshi (0.4.4) 560.30 271.69
Mako (0.1.9) 17.78 13.49
Templetor (web.py 0.22) 428.19 61.53
Ruby(1.8.6) rbTenjin (0.6.0) 7.34 4.52
eruby (1.0.5) 12.29 11.53
ERB(def_method) (Ruby1.8.6) 36.73 5.85
PHP(5.2.0) phpTenjin (0.0.1) 5.39 3.64
Smarty (2.6.18) 10.84 10.21
Perl(5.8.8) plTenjin (0.0.1) 10.42 5.72
Template-Toolkit(XS) (2.18) 103.58 26.30
HTML::Template (2.9) 46.70 30.21
JS(spidermonkey) jsTenjin (0.0.1) 19.00 12.98
JS(Rhino, JDK5) jsTenjin (0.0.1) 24.29 19.15
Java(JDK5) Velocity (1.4) 22.80 11.41
Velocity (1.5) 20.01 8.42