Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从可调用的视图渲染Jinja2宏?_Python_Templates_Macros_Pyramid_Jinja2 - Fatal编程技术网

Python 如何从可调用的视图渲染Jinja2宏?

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提交新评论时,我希望返回呈现的评论,以便将内容附加到

我定义了一些宏,这些宏是从几个模板调用的

例如,Product页面有一个Review部分,该部分使用
'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()