gpt4 book ai didi

python - 在 Pyramid 中,如何根据上下文内容使用不同的渲染器?

转载 作者:太空狗 更新时间:2023-10-29 21:22:59 26 4
gpt4 key购买 nike

我有 3 种不同的产品页面布局,我想根据有关产品的可用信息来显示它们。使用遍历,我有一个名为 ProductFinder 的类可以获取所有信息。例如,用户转到 domain/green/small,ProductFinder 将列出我的数据库中的所有绿色和小型产品。此列表是 ProductFinder 类中的 self.products。在我的 __init__.py 中,我添加了以下行:

config.add_view('app.views.products', name='')

在 products.py 中我有:

from pyramid.view import view_config
@view_config(context='app.models.ProductFinder', renderer='productpage.mako')
def products(context, request):
return dict(page=context)

基于 context.products 中的内容,虽然我想呈现不同的 mako。在 Pylons 中,我会做类似的事情:

def products(context, request):
if len(context.products) == 1:
return render("oneproduct.mako")
elif len(context.product) == 2:
return render("twoproducts.mako")

那么我如何根据上下文的内容呈现不同的模板呢?

最佳答案

我首先要说的是,这似乎是您希望在模板中处理的事情。

但是,您可以以任何您想要的方式影响将哪个渲染器用作 View 查找的一部分。正如您可能已经知道的,您可以对多个 View 使用相同的 View 处理程序,您只需要帮助 Pyramid 确定使用哪个。

例如:

from pyramid.view import view_config

def ProductLengthPredicate(length):
def check_length(context, request):
return len(context.products) == length
return check_length

@view_config(context='app.models.ProductFinder', renderer='oneproduct.mako',
custom_predicates=(ProductLengthPredicate(1),))
@view_config(context='app.models.ProductFinder', renderer='twoproducts.mako',
custom_predicates=(ProductLengthPredicate(2),))
@view_config(context='app.models.ProductFinder', renderer='manyproducts.mako')
def products(context, request):
return dict(page=context)

注意。有些人可能对 render_to_response 更感兴趣在这里接近,因为那样他们就不会依赖 custom_predicates .但这当然取决于您!

@view_config(context='app.models.ProductFinder', renderer='manyproducts.mako')
def products(context, request)
opts = dict(page=context)
if len(context.products) == 1:
return render_to_response('oneproduct.mako', opts, request)
if len(context.products) == 2:
return render_to_response('twoproducts.mako', opts, request)
return opts

这是可行的,因为如果您的 View 返回 Response(),Pyramid 将忽略渲染器,这正是 render_to_response 所做的。

关于python - 在 Pyramid 中,如何根据上下文内容使用不同的渲染器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553569/

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