相当于金字塔中的模板上下文(pylons用户)

2024-10-01 13:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

什么是金字塔中模板上下文的等价物?在

金字塔中的IBeforeRender事件与此有关吗?我已经看过了官方文档,但是很难理解IBeforeRender事件到底是什么。在


Tags: 文档模板官方事件ibeforerender
3条回答

在我看来,上面的解决方案并没有完全复制挂架模板上下文的行为。如果在Pylons中呈现一个页面请求,并在上下文c中添加一些值a,那么可以在模板中以c.a的形式访问它。但是,如果一个呈现另一个请求,这个键/值将被删除。在

上面的金字塔解决方案显示了另一种行为。键/值c.a将保留在模板上下文中。有时,这是不可取的。有什么建议可以弥补这种差异吗?在

相反,如果您希望得到一些“全局包”,可以将变量填充到每个模板,那么您关于IBeforeRender的问题是恰当的。在

from pyramid.events import subscriber
from pyramid.events import BeforeRender

@subscriber(BeforeRender)
def add_global(event):
    event['name'] = 'Pyramid Developer'

在设置配置器时,还有一种添加全局变量的替代方法。您可以在以下位置查看完整信息:http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#using-the-before-render-event

Pyramid已经在其请求对象上提供了一个tmpl_context,因此您只需订阅一个BeforeRender事件即可将其添加到呈现程序全局参数中:

def add_renderer_globals(event):
    event['c'] = request.tmpl_context
    event['tmpl_context'] = request.tmpl_context

config.add_subscriber(add_renderer_globals, 'pyramid.events.BeforeRender')

从现在起,当您收到请求时,可以在代码中设置参数:

^{2}$

随后,您的模板可能会引用name变量:

${ c.name }

相关问题 更多 >