gpt4 book ai didi

python - 使用 Pyramid 加载 ajax 的更好模式?

转载 作者:太空狗 更新时间:2023-10-30 02:05:49 25 4
gpt4 key购买 nike

我已经阅读了 using different renderersoverriding renderer但我想知道是否有更好的方法来处理这种模式。

现在,在我看来,我正在向模板返回一组项目:

@view_config(
route_name = 'name',
permission = 'perm',
renderer = 'r.mako'
)
def r( request ):
items = get_items()
return { 'items': items }

现在我希望 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 }

我想我特别想知道是否有更简洁的方法来覆盖渲染器,然后将其包装在某些东西中,而无需显式调用渲染器并确保我得到正确的字典或请求作为参数。谢谢

最佳答案

我建议使用 2 个 View ,这样您就可以对相同的数据应用不同的“外观和感觉”(响应)。

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

如果您害怕重复 View 配置,Pyramid 1.3 在其基于类的 View 中提供了一个很酷的新功能:

@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

关于python - 使用 Pyramid 加载 ajax 的更好模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com