在同一视图方法内切换渲染器的简便方法
问题内容:
我这样设置我的功能
@view_config(
route_name = 'route_name',
permissions = 'permissions',
renderer = 'r.mako'
)
def r( request ):
# stuff goes here
现在,我想添加功能,以便检查某些条件(使用ajax),我将使用一个模板,否则将使用另一个模板。有没有办法在金字塔中做到这一点?谢谢
问题答案:
如果可以通过谓词确定要执行的操作,则可以使用不同的渲染器多次添加视图。例如
@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/zh-
CN/1.3-branch/narr/renderers.html#overriding-a-renderer-at-
runtime
或者,您可以仅通过视图中的render
和render_to_response
方法显式呈现响应,因为renderer
如果Response
从视图中返回对象,则将忽略该参数。
请注意,xhr
第一个示例中的谓词应足以检查ajax请求。还请注意,如果您不想这样做,则不必对两者都使用相同的视图,只需视情况而定。