5

いくつかのテンプレートから呼び出されるいくつかのマクロを定義しています。

たとえば、[製品]ページには、で定義されたマクロを使用して'helpers/review.jinja2'各レビューを印刷する[レビュー]セクションがあります。ファイルには次の'helpers/review.jinja2'2つのマクロがあります。

{% 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)

しかし、これを行うためのより良い方法があることを願っています。では、テンプレートで定義されたマクロをレンダリングすることは可能ですか?

ありがとう

4

2 に答える 2

4

解決策は、Armin の別のプロジェクトで実際に見つけることができます。Flask はメソッドを実装します (メソッドのソースについては、こちらget_template_attributeを参照してください)。これは、Jinja2 のクラス、より具体的にはクラスの属性を示しています。 TemplateTemplatemodule

Jinja2 用の Pyramid のデフォルト レンダラーがその機能を公開しているかどうかはわかりませんが、デフォルトのレンダラーで次のようなことができない場合は、カスタム レンダラーを作成して登録することができるはずです (完全に理論的です)。

@view_config(route_name='review.add_review',
                renderer='helpers/review.jinja2:render_review')
def add_review(request):
    return dict(review=my_new_review)
于 2012-08-14T02:52:17.307 に答える