嵌套龙卷风模板中继承的python vars

时间:2011-09-11 20:36:05

标签: templates tornado

我正在尝试使用{%include%}嵌套龙卷风模板:

<html>
    {% for headline in HL['headlines'] %} 
        {% include 'hl_1.html' %}
    {% end %}
    </ul>
  </body>
</html>

上面的模板有效,上面的子模板有效。我无法弄清楚如何做的是传递子模板的名称(例如,在父模板的命名空间中用字符串参数替换'hl_1.html')。在查看template.py源代码之后,似乎{%include接受一个字符串而没有别的。但如果可以动态指定子模板,那就太棒了。

有没人试过这个并成功了?

感谢

1 个答案:

答案 0 :(得分:2)

实现这一目标通常是使用UI modules

这就是我构建应用的方式。

首先main.py

import tornado.ioloop                                           
import tornado.web 
import views

class MainHandler(tornado.web.RequestHandler):                  
    def get(self):                                              
        HL = {                                                  
                'headlines': ['head1', 'head2', 'head3'],
                }
        self.render('tmpl.html', HL=HL)

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
    ], ui_modules=views)
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

然后是您的模板tmpl.html

<html>
    {% for headline in HL['headlines'] %} 
        {% module Headline(headline) %}
    {% end %}
    </ul>
  </body>
</html>

最后,views.py,您可以在其中定义所有UI模块:

from tornado.web import UIModule

class Headline(UIModule):
    def render(self, name):
        return '<h1>%s</h1>' % name

UI modules就像“可重复使用的模板”,它接受参数。