我正在尝试使用{%include%}嵌套龙卷风模板:
<html>
{% for headline in HL['headlines'] %}
{% include 'hl_1.html' %}
{% end %}
</ul>
</body>
</html>
上面的模板有效,上面的子模板有效。我无法弄清楚如何做的是传递子模板的名称(例如,在父模板的命名空间中用字符串参数替换'hl_1.html')。在查看template.py源代码之后,似乎{%include接受一个字符串而没有别的。但如果可以动态指定子模板,那就太棒了。
有没人试过这个并成功了?
感谢
答案 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
就像“可重复使用的模板”,它接受参数。