在同一视图方法中在渲染器之间切换的简便方法

时间:2011-12-20 09:20:46

标签: python pyramid

我设置了这样的功能

@view_config(
    route_name = 'route_name',
    permissions = 'permissions',
    renderer = 'r.mako'
)
def r( request ):
    # stuff goes here

现在,我想添加一些功能,以便我检查某些条件(使用ajax)我将使用一个模板,否则使用另一个。有没有办法在金字塔中做到这一点?感谢

1 个答案:

答案 0 :(得分:15)

如果您可以通过谓词确定要执行的操作,则可以使用不同的渲染器多次添加视图。例如

@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'手动覆盖渲染器:

http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/renderers.html#overriding-a-renderer-at-runtime

或者您可以通过视图中的renderrender_to_response方法显式呈现响应,因为如果返回renderer对象,则会忽略Response参数从视角来看。

请注意,第一个示例中的xhr谓词应足以检查ajax请求。另请注意,如果您不想,则不必为两者使用相同的视图,只需依赖。