Turbogears2:Django 上下文处理器的模拟
Turbogears2 中是否有 django 上下文处理器的模拟? 在 tg1 中是 stdvars,但在 tg2 中不再是。
解释: 我需要有一些模板标签,在每个页面上都可用,而无需在每个控制器中进行明显的声明。
Is there any analog of django context processors in turbogears2?
In tg1 was stdvars, but not in tg2 anymore.
Explaining:
I need to have some template tags, avaible on each page, without obvious declaring in each controller.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用三种可能的解决方案来实现这一目标。
首先,您可以使用
tg.tmpl_context
,它在每个模板中都可用作为tmpl_context
。您可以填充 BaseController.__call__ 内的变量,以便它们在任何地方都可用。
另一种方法是在
app_cfg.py
内注册base_config.variable_provider
,它必须是一个返回可在任何模板内使用的变量字典的函数。如果存在名称冲突,这些变量将被控制器返回的变量覆盖,因此这是为控制器返回的变量提供默认值的好方法。否则,在最近的版本中,也可以使用
app_cfg.py
内的base_config.register_hook
在系统范围内注册before_render
钩子,回调可以附加和覆盖任何模板参数。You have three possible solutions to achieve this.
First you can use
tg.tmpl_context
which is available inside every template astmpl_context
.You can fill the variables inside the
BaseController.__call__
so that they are available everywhere.Another approach is to register
base_config.variable_provider
insideapp_cfg.py
which must be a function that returns a dictionary of variables that will be available inside any template. Those variables will be overridden from the controller returned ones if there is a name collision, so it is a good way to provide defaults for controller returned variables.Otherwise in recent versions it is also possible to register the
before_render
hook systemwide usingbase_config.register_hook
insideapp_cfg.py
the callback can append and override any template parameter.我不确定这是否是最好的方法,但您可以将以下内容添加到 app_globals.Global:
中,然后添加到您的模板中:
或者您可以通过 ajax 请求来完成。 ..
I'm not sure if this would be the best way of doing it but you could add the following to app_globals.Global:
and then in your your templates:
or you could do it via an ajax request...