Pyramid提供了beforeRenderer
from repoze.events import subscriber
from pyramid.events import BeforeRender
@subscriber(BeforeRender)
def add_global(event):
print event['renderer_name'] #this is the renderer name
print event['renderer_info'].name #same with event['renderer_name']
但没用。如果我更改或删除事件['renderer_name']和事件['renderer_info']。name,它也可以在config中找到渲染器(模板文件)。
config.add_view('mywork.views.index.index',
route_name='/index',
renderer='mywork:templates/index.pt')
我想在view.py或root_factory中使用渲染器的名称来更改渲染器值,因此它可以更改所有模板。
答案 0 :(得分:1)
在渲染之前调用BeforeRender。换句话说,它在view.py
之后调用,我假设你放置了你的视图。在此之前也会调用root_factory
。 root_factory
用于创建遍历的根节点。这将返回一个上下文。没有上下文,您的视图不会被调用,金字塔会引发上下文未找到错误。
在您的视图返回一些参数之后调用BeforeRender,或者可能在调用返回渲染器响应的renderToResponse
之前调用。您可以在视图中传递渲染器。
您必须在设置视图时删除渲染器参数。