嵌套龙卷风模板中继承的Python变量

发布于 2024-12-04 07:29:21 字数 395 浏览 4 评论 0原文

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

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

上面的模板有效,上面的子模板也有效。我不知道该怎么做是传递子模板的名称(例如,用父模板的命名空间中的字符串参数替换“hl_1.html”)。查看 template.py 源代码后,似乎 {% include 接受一个字符串,而不接受其他任何内容。但如果能够动态指定子模板那就太好了。

有人尝试过这个并成功吗?

谢谢

I am trying to nest tornado templates using {% include %}:

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

The template above works, and the sub-template above works. What I cannot figure out how to do is pass in the name of the sub-template (e.g.replacing 'hl_1.html' with a string parameter in the parent template's namespace). AFter reviewing the template.py source code it seems that {% include accepts a string and nothing else. But it would be fantastic if one could dynamically specify sub-templates.

Has anyone tried this and succeeded?

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

川水往事 2024-12-11 07:29:21

实现此目的的方法通常是使用 UI 模块。

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

首先 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 模块 就像“可重用模板”,接受参数。

The way this is achieved usually is by using UI modules.

This is how I would structure your app.

First 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()

Then your template tmpl.html:

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

Finally, views.py, where you can define all your UI modules:

from tornado.web import UIModule

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

UI modules are like "reusable templates", that accept parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文