如何简化Tornado的模块传值?

2012-08-18 02:56:33 +08:00
 zzxworld
一个简单的问题 ,表达起来还真是有点困难。大致是如下的情况:

使用tornado做的网站中,多个页面用到了同一个菜单,菜单内容是从数据库中读取的。现在每个request handler的get方法中都有如下的内容:

self.render(..., menu=menu(), ...)

有什么办法可以在一个函数中搞定这种全局的模板参数,而不是在每个 get 方法中都要添加此参数?
7466 次点击
所在节点    Tornado
9 条回复
jerry
2012-08-18 03:08:00 +08:00
写个BaseHandler,在里面重写下render()
fanzeyi
2012-08-18 03:15:23 +08:00
所有的 Request Handler 都从一个 Base Handler 继承, Base Handler 则继承 tornado.web.RequestHandler

然后在 Base Handler 里重写 render 函数

def render(self, *args, **kwargs):
super(BaseHandler, self).render(menu = menu(), *args, **kwargs)

(应该是这么写的= = 未测试)
zhouyang
2012-08-18 07:01:11 +08:00
可以用uimodule吧
reorx
2012-08-18 09:36:24 +08:00
@fanzeyi render 接受的第一个参数是 template 的文件名。。

Lz 的需求,使用 UIModule 是很合适的,具体可以看这里:
http://www.tornadoweb.cn/documentation#ui
fanzeyi
2012-08-18 11:54:36 +08:00
@reorx 举个栗子嘛……
reorx
2012-08-18 12:41:01 +08:00
zzxworld
2012-08-20 10:49:43 +08:00
@all thx.
uimodule的确很好用,谢谢。
kernel1983
2012-08-24 09:57:13 +08:00
self.render 早就不用带一堆参数了!

self.a = "xxx" 之后 在模版里面可以直接 {{ handler.a }}

令人惊讶的是这些信息都写在 http://www.tornadoweb.org/documentation/overview.html 页面上,

escape: alias for tornado.escape.xhtml_escape
xhtml_escape: alias for tornado.escape.xhtml_escape
url_escape: alias for tornado.escape.url_escape
json_encode: alias for tornado.escape.json_encode
squeeze: alias for tornado.escape.squeeze
linkify: alias for tornado.escape.linkify
datetime: the Python datetime module
handler: the current RequestHandler object
request: alias for handler.request
current_user: alias for handler.current_user
locale: alias for handler.locale
_: alias for handler.locale.translate
static_url: alias for handler.static_url
xsrf_form_html: alias for handler.xsrf_form_html
reverse_url: alias for Application.reverse_url
All entries from the ui_methods and ui_modules Application settings
Any keyword arguments passed to render or render_string

http://www.tornadoweb.org/documentation/template.html 页面上居然只字未提

我估计看完这个以后, 大家都去忙着修改自己现有的代码了
703040135
2012-08-24 10:24:42 +08:00
jinja2中有类似 UIModule 的方法么

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

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

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

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

© 2021 V2EX