2012-08-09 16 views
5

いくつかのテンプレートから呼び出されるマクロがいくつか定義されています。ビューから呼び出し可能なJinja2マクロをレンダリングするには?

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

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

誰かが新しいレビューを提出し、アヤックスを経て、私はレビューセクションにコンテンツを追加するために、レンダリングされたレビューを返すようにしたいです。

今、私はこのようになります中間テンプレート'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) 

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

おかげ

+0

私はJinja2ののa〜dの迅速な検索をしましたこれを行う方法はないようです。 –

答えて

3

ソリューションは、実際にはアーミンのプロジェクトのもう一つで見つけることができます - フラスコはget_template_attributeメソッドを実装します(メソッドのソースのhereを参照してください)。これは、Jinja2のTemplateクラス、具体的にはTemplateクラス 'module attribute'を示しています。

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) 
+0

普通のピラミッドでは機能しませんでした。複雑に見えますが、もう一度試してみます:D –

関連する問題