在同一视图方法中轻松切换渲染器的方法
我把我的函数设置成这样
@view_config(
route_name = 'route_name',
permissions = 'permissions',
renderer = 'r.mako'
)
def r( request ):
# stuff goes here
现在,我想增加一个功能,就是根据某些条件(用ajax)来决定使用一个模板,如果条件不满足,就用另一个模板。请问在pyramid里有办法做到这一点吗?谢谢!
1 个回答
16
你可以根据条件来决定要怎么处理视图,这样就可以用不同的渲染器多次添加同一个视图。比如说:
@view_config(route_name='route', xhr=True, renderer='json')
@view_config(route_name='route', renderer='r.mako')
@view_config(route_name='route', request_param='fmt=json', renderer='json')
def r(request):
# ...
或者你也可以手动覆盖渲染器,方法是用 request.override_renderer = 'b.mako'
:
另外,你也可以直接在视图中使用 render
和 render_to_response
方法来明确渲染响应,因为如果你从视图返回一个 Response
对象,renderer
参数就会被忽略。
需要注意的是,第一个例子中的 xhr
条件足以用来检查是否是 ajax 请求。还有,如果你不想的话,也不一定要对两个请求使用同一个视图,这完全看你的需求。