将变量传递给Tornado基本模板

时间:2014-08-15 16:13:34

标签: python tornado

我有一个基本模板base.html,其他模板可以从中继承。

用户登录后,我想在base.html

中定义的导航栏上显示他们的用户ID

所以我有:

class CloseHandler(tornado.web.RequestHandler):   
    def get(self):       
        ui=db.users.find_one({"Username": ui0})        
        self.render("thanks.html" , ui1 = ui["Username"])

我还想在基本模板中显示ui1的值:<p>{{ ui1 }}</p>

唯一的方法是从base.html移动我的导航栏html代码并将其插入到其他所有模板中。

但我收到此错误:

 NameError: global name 'ui1' is not defined

我已经尝试将其设置为全局变量,但仍然会出现相同的错误。

那么变量如何在不同的模板中使用?

1 个答案:

答案 0 :(得分:2)

我知道这个问题很旧,但是我建议创建一个基类,您的处理程序将对其进行扩展:

class BaseHandler(tornado.web.RequestHandler):。这将允许您添加所有处理程序可用的功能。

接下来,您可以扩展tornado.web.RequestHandler.get_template_namespace()函数,并将全局变量添加到名称空间:

# class BaseHandler
def get_template_namespace(self):
    namespace = super(BaseHandler, self).get_template_namespace()
    namespace.update({
        'username': self.get_current_username() # or however you retrieve users
    })
    return namespace

所有传递给名称空间的东西都将提供给您所有处理程序中的self.render

现在,您可以在base.html或扩展它的视图中访问{{ username }}