【发布时间】:2011-12-16 08:56:43
【问题描述】:
turbogears2 中是否有任何 django 上下文处理器的模拟? 在 tg1 中是标准变量,但在 tg2 中不再是。
解释: 我需要有一些模板标签,在每个页面上都可用,而在每个控制器中没有明显的声明。
【问题讨论】:
标签: python django turbogears genshi
turbogears2 中是否有任何 django 上下文处理器的模拟? 在 tg1 中是标准变量,但在 tg2 中不再是。
解释: 我需要有一些模板标签,在每个页面上都可用,而在每个控制器中没有明显的声明。
【问题讨论】:
标签: python django turbogears genshi
我不确定这是否是最好的方式,但您可以将以下内容添加到 app_globals.Global:
from genshi.core import Markup
self.foo = lambda: Markup("<div>my content here!!!</div>")
然后在您的模板中:
${g.foo()}
或者您可以通过 ajax 请求来实现...
【讨论】:
您有三种可能的解决方案来实现这一目标。
首先您可以使用tg.tmpl_context,它在每个模板中都可以使用tmpl_context。
您可以在BaseController.__call__ 中填充变量,以便它们随处可用。
另一种方法是在app_cfg.py 中注册base_config.variable_provider,它必须是一个函数,该函数返回可在任何模板中使用的变量字典。如果存在名称冲突,这些变量将从控制器返回的变量中覆盖,因此这是为控制器返回的变量提供默认值的好方法。
否则,在最近的版本中,还可以使用base_config.register_hook 在app_cfg.py 内注册before_render 钩子系统范围,回调可以附加和覆盖任何模板参数。
【讨论】:
base_config.variable_provider 对我来说也是新的!