Python 如何从可调用的视图渲染Jinja2宏?
我定义了一些宏,这些宏是从几个模板调用的 例如,Product页面有一个Review部分,该部分使用Python 如何从可调用的视图渲染Jinja2宏?,python,templates,macros,pyramid,jinja2,Python,Templates,Macros,Pyramid,Jinja2,我定义了一些宏,这些宏是从几个模板调用的 例如,Product页面有一个Review部分,该部分使用'helpers/Review.jinja2'中定义的宏打印每个评论。'helpers/review.jinja2'文件包含以下两个宏: {% macro render_review(request,review) -%} {% macro render_review_comment(request,comment) -%} 当有人通过ajax提交新评论时,我希望返回呈现的评论,以便将内容附加到
'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_config(route_name='review.add_review', renderer='review/review.jinja2')
def add_review(request):
return dict(review=my_new_review)
但我希望有更好的方法来做到这一点。那么,是否可以呈现在模板中定义的宏
多亏了这个解决方案实际上可以在Armin的另一个项目中找到——Flask实现了一个方法(有关该方法的来源,请参阅)。这就指向了Jinja2的
模板
类,更具体地说,就是模板
类
我不知道Pyramid针对Jinja2的默认渲染器是否为您公开了该功能,但如果默认渲染器不允许您执行类似操作(完全是理论上的),则应该可以创建并注册自定义渲染器:
这种方法是在别处提出的,它帮助了我:
@app.route("/test")
def test_view():
t = app.jinja_env.get_template('macros.html')
mod = t.make_module({'request': request})
return mod.my_macro()
我只是快速搜索了Jinja2的文档,但似乎没有任何方法可以做到这一点。它不适用于普通金字塔。它看起来很复杂,但我会再试一次:D
@app.route("/test")
def test_view():
t = app.jinja_env.get_template('macros.html')
mod = t.make_module({'request': request})
return mod.my_macro()