如何先把current_user还有xsrf_form_html,早点传到模板去?

2012-12-20 17:01:16 +08:00
 kenneth
能不能在BaseHandler就传到Jinja2模板去,我不想每次都传current_user,xsrf_form_html

有没有好的BaseHandler参考一下?
4939 次点击
所在节点    Tornado
10 条回复
kenneth
2012-12-20 17:25:18 +08:00
Tornado整合Jinja2的时候,如何把这些变量传过去呢?
kenneth
2012-12-20 18:01:51 +08:00
@livid 就是希望tornado自带的{{xsrf_form_html()}}可以直接在Jinja2的模版里使用
keakon
2012-12-20 19:23:48 +08:00
覆盖 render 方法,把 self 传进去=。=
fanzeyi
2012-12-20 19:26:19 +08:00
kenneth
2012-12-21 14:16:25 +08:00
@fanzeyi 谢谢你的思路,确实就是这样的东西,但是期待一个更好的实现。
Livid
2012-12-21 14:18:46 +08:00
继承 RequestHandler,重新实现 initialize 方法,在 initialize 的时候给 handler instance 加一个数组 self._values,新增 finalize 方法,然后在其中把 _values 数组传给 Jinja2。
kenneth
2012-12-21 14:29:51 +08:00
@Livid 我菜鸟,所以还是不太明白。我搜索了一些网络文章,这篇http://www.yeolar.com/note/2012/08/26/mako-usage/ 整合的是mako,感觉是我想要的,jinja2不知道如何重写render_string() 方法。
我试着用Tornado模仿v2ex,http://www.mvmap.com正在写。
Mattsive
2012-12-21 19:28:22 +08:00
继承 RequestHandler,加一个 current_user 的 @property,在 view 里需要的时候 handler.current_user 即可
nanbei
2012-12-21 23:54:41 +08:00
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
username = self.get_secure_cookie("username")
if not username:
return None
return username

def get_context(self):
self.context = {
'current_user':self.get_current_user(),
}
logging.info(self.xsrf_form_html)
if config['app']['xsrf_cookies']:
self.context['xsrf_form_html'] = self.xsrf_form_html
return self.context
nanbei
2012-12-21 23:55:19 +08:00
强烈建议v2ex加上代码高亮!!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55405

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX