Genshi是Python环境下的一个比较出名的HTML/XML/…模板框架. 作为TurboGears2.1缺省的模板组件, Genshi得到了很多好评. 我也正是因为TG粘合了如此优秀的组件而决心学习TG的.
TG2.1样本项目里的主模板文件master.html的完整解释: http://www.turbogears.org/2.1/docs/main/master_html.html#master-html
Genshi模板基础: http://genshi.edgewall.org/wiki/Documentation/templates.html
首先, 在TG2中通过@expose decorator来为一个View(V in MVC)指定Genshi模板. 如果不需要模板, 就是:
@expose() def hello(self): return "Hello world from controller."
这样在缺省的开发环境下, 访问http://127.0.0.1:8080/hello, 将得到简单的
Hello world from controller.
当然, 这除了测试似乎没有什么实际意义. 然后是使用模板的版本:
@expose('example.templates.index') def new_hello(self): return dict(hello="New text from controller + template ", page="new_hello")
这样, TG会寻找example项目下的example/templates/index.html作为new_hello的模板. 同时, 将两个key传递给模板: hello和page. 而在index模板内, 可以很随意的调用这两个获得的key.
<h1 py:content=”hello”>old Hello, world.</h1>
Now Viewing: <span py:replace=”page”/>
区别在于, <h1>内的内容”old Hello, world.”会被hello的值替代, 而<span>则并不会出现, 完全被page值取代. 另外模板里的${text} 和php里面的<?php echo $text; ?>类似吧.
5 responses to “学TurboGears 2顺便还得学习一下Genshi”
感觉还是django的模板系统易读一些
{% if hello %}{{hello}}{% else %}old Hello, world.{% endif %}
感觉django基于花括号的体系很显眼。
你帖的这个太容易和 css混起来。
而且我不太喜欢php的$
试试而已啦 🙂
只是说显示风格。
其实django的模版估计是除了它的orm,被替换的最多的了。
记得python还有几个模版系统比较有名的样子
过来跟Raynix打个招呼!好久都没来了!
祝全家和笑笑happy 🙂
谢谢, 也祝你们happy 😀