龙卷风 - 龙卷风中的“全球变量”?

时间:2013-04-26 10:16:58

标签: python web tornado

class MainHandler(BaseHandler):
    @tornado.web.authenticated
    def get(self):
        self.render("index.html", messages=MessageMixin.cache)

因此MainHandler未将requestcurrent_user传递给index.html。但在index.html中,我尝试了<p>{{ current_user }}</p> <p>{{ request }}</p>,然后生成了大量输出。这在龙卷风中是某种“全局变量”吗?

3 个答案:

答案 0 :(得分:4)

在Tornado模板中免费提供了几件事。

这些变量不需要传入 - 这是您通过current_user和request看到的。

以下是默认情况下获得的所有变量的list

答案 1 :(得分:0)

它们是Tornado中默认模板上下文的一部分。文档实际上涵盖了所有available ones

答案 2 :(得分:0)

  • 秘密在于源代码!

  • tornado.web有一个名为'get_template_namespace'的函数,你甚至可以覆盖

  • 代码明细:

  
def get_template_namespace(self):
    """ Returns a dictionary to be used as the default template namespace.
    May be overridden by subclasses to add or modify values.
    The results of this method will be combined with additional
    defaults in the tornado.template module and keyword arguments
    to render or render_string.
    """
    namespace = dict(
        handler=self,
        request=self.request,
        current_user=self.current_user,
        locale=self.locale,
        _=self.locale.translate,
        pgettext=self.locale.pgettext,
        static_url=self.static_url,
        xsrf_form_html=self.xsrf_form_html,
        reverse_url=self.reverse_url
    )
    namespace.update(self.ui)
    return namespace