我有一个基本模板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
我已经尝试将其设置为全局变量,但仍然会出现相同的错误。
那么变量如何在不同的模板中使用?
答案 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 }}
。