Turbogears2:Django 上下文处理器的模拟

发布于 2024-12-12 02:29:21 字数 123 浏览 0 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜雨飘雪 2024-12-19 02:29:22

您可以使用三种可能的解决方案来实现这一目标。

首先,您可以使用 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 as tmpl_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 inside app_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 using base_config.register_hook inside app_cfg.py the callback can append and override any template parameter.

弄潮 2024-12-19 02:29:22

我不确定这是否是最好的方法,但您可以将以下内容添加到 app_globals.Global:

from genshi.core import Markup
self.foo = lambda: Markup("<div>my content here!!!</div>")

中,然后添加到您的模板中:

${g.foo()}

或者您可以通过 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:

from genshi.core import Markup
self.foo = lambda: Markup("<div>my content here!!!</div>")

and then in your your templates:

${g.foo()}

or you could do it via an ajax request...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文