我已经阅读了使用不同的渲染器或重写渲染器,但我想知道是否有更好的方法来处理这种模式.
现在,在我看来,我正在向模板返回一组项目:
@view_config(
route_name = 'name',
permission = 'perm',
renderer = 'r.mako'
)
def r( request ):
items = get_items()
return { 'items': items }
Run Code Online (Sandbox Code Playgroud)
现在我希望ajax版本只是渲染它的一个子集,也有一些数据.我目前的工作代码:
@view_config(
route_name = 'name',
permission = 'perm',
renderer = 'r.mako'
)
def r( request ):
items = get_items()
if ajax:
return Response( to_json( {
'data1': 1,
'data2': 2,
'data3': 3,
'html': renderers.render( 'shortr.mako',
{ 'items': items },
request )
} )
return { 'items': items }
Run Code Online (Sandbox Code Playgroud)
我想具体我想知道是否有一种更简洁的方法来覆盖渲染器,然后将其包装在某些东西中,而不显式调用渲染并确保我得到了正确的dict或请求作为参数.谢谢
我建议使用2个视图,它们可以恰当地允许您对同一数据应用不同的"外观"(响应).
def get_items(request):
return {} # values that you can pick and choose from in each view
@view_config(route_name='name', permission='perm', xhr=True, renderer='json')
def r_ajax(request):
items = get_items(request)
return {
'data1': 1, 'data2': 2, 'data3': 3,
'html': renderers.render('shortr.mako', {'items': items}, request),
}
@view_config(route_name='name', permission='perm', renderer='r.mako')
def r_html(request):
items = get_items(request)
return items
Run Code Online (Sandbox Code Playgroud)
如果你害怕为视图配置重复一些事情,Pyramid 1.3在其基于类的视图上带来了一个很酷的新功能:
@view_defaults(route_name='name', permission='perm')
class R(object):
def __init__(self, request):
self.request = request
self.items = # ...
@view_config(xhr=True, renderer='json')
def ajax(request):
return {
'data1': 1, 'data2': 2, 'data3': 3,
'html': renderers.render('shortr.mako', {'items': items}, request),
}
@view_config(renderer='r.mako')
def html(request):
return self.items
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |