tornado中controller如何传递变量到模版

tornado中controller如何传递变量到模版
或者说模版中如何调用controller变量

最优化的方法是什么?

阅读 7.4k
4 个回答

也是不小心翻文档 http://www.tornadoweb.org/documentati... 发现了更好的方法

Controller:

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.items = ["Item 1", "Item 2", "Item 3"]
        self.title = "My title"
        self.render("template.html")

Template:

<html>
    <head>
        <title>{{ handler.title }}</title>
    </head>
    <body>
        <ul>
        {% for item in handler.items %}
            <li>{{ escape(item) }}</li>
        {% end %}
        </ul>
    </body>
</html>

代码说话吧:

Controller:

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        items = ["Item 1", "Item 2", "Item 3"]
        self.render("template.html", title="My title", items=items)

Template:

<html>
   <head>
      <title>{{ title }}</title>
   </head>
   <body>
     <ul>
       {% for item in items %}
         <li>{{ escape(item) }}</li>
       {% end %}
     </ul>
   </body>
 </html>

翻翻文档吧:
http://www.tornadoweb.org/documentati...

不记得文档出处了,从我以前写的代码里面翻到的,貌似可读性上比@KJ 以及@agassi_yzh 的方法都好那么一丢丢。

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        items = ["Item 1", "Item 2", "Item 3"]
        params = {
            "title" : "Your Title",
            "item" : items
        }
        self.render(u"template.html", **params)
<html>
    <head>
        <title>{{ title }}</title>
    </head>
    <body>
        <ul>
        {% for item in items %}
            <li>{{ escape(item) }}</li>
        {% end %}
        </ul>
    </body>
</html>

加到本身的handler中, 在页面中可以用handler调用.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏