gpt4 book ai didi

python - 如何从可调用 View 渲染 Jinja2 宏?

转载 作者:太空狗 更新时间:2023-10-30 01:16:38 25 4
gpt4 key购买 nike

我定义了一些从多个模板调用的宏。

例如,产品页面有一个评论部分,它使用 'helpers/review.jinja2' 中定义的宏来打印每条评论。 'helpers/review.jinja2' 文件有这两个宏:

{% macro render_review(request,review) -%}
{% macro render_review_comment(request,comment) -%}

当有人通过 ajax 提交新评论时,我想返回呈现的评论,以便将内容附加到评论部分。

现在,我有一个中间模板 'review/review.jinja2' 如下所示:

{% import 'helpers/review.jinja2' as review_helper %}
{{ review_helper.render_review(request,review) }}

此模板是从 View 中呈现的:

@view_config(route_name='review.add_review', renderer='review/review.jinja2')
def add_review(request):
return dict(review=my_new_review)

但我希望有更好的方法来做到这一点。那么,是否可以渲染模板中定义的宏?

谢谢

最佳答案

解决方案实际上可以在 Armin 的另一个项目中找到 - Flask 实现了一个 get_template_attribute方法(有关方法的来源,请参见 here)。这将我们指向 Jinja2 的 Template 类,更具体地说,Template 类' module attribute .

我不知道 Pyramid 的 Jinja2 默认渲染器是否为您公开了该功能,但如果默认渲染器不允许您执行此类操作(完全是理论上的),则应该可以创建并注册自定义渲染器:

@view_config(route_name='review.add_review',
renderer='helpers/review.jinja2:render_review')
def add_review(request):
return dict(review=my_new_review)

关于python - 如何从可调用 View 渲染 Jinja2 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892566/

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