学TurboGears 2顺便还得学习一下Genshi


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”

  1. 感觉还是django的模板系统易读一些
    {% if hello %}{{hello}}{% else %}old Hello, world.{% endif %}

    感觉django基于花括号的体系很显眼。

    你帖的这个太容易和 css混起来。

    而且我不太喜欢php的$

  2. 只是说显示风格。
    其实django的模版估计是除了它的orm,被替换的最多的了。
    记得python还有几个模版系统比较有名的样子