2012-08-09 70 views
5

我有一些宏定義,從幾個模板中調用。如何從可視化的視圖渲染Jinja2宏?

例如,產品頁面有一個「評論」部分,該部分使用'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) 

但我希望有一個更好的方式來做到這個。那麼,是否有可能呈現模板中定義的宏?

由於

+0

我只是做了通過使用Jinja2的d快速搜索ocs,看起來沒有任何辦法可以做到這一點。 – 2012-08-11 04:41:31

回答

3

溶液實際上可以在阿明的項目中的另一箇中找到 - 瓶實現get_template_attribute方法(參見here用於該方法的源)。這給我們指出了Jinja2的Template班,更具體地說,Template班'module attribute

我不知道金字塔的Jinja2的默認渲染器是否爲您提供了該功能,但是如果默認渲染器不允許您這樣做(完全理論上),應該可以創建並註冊自定義渲染器:

@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 – 2012-08-28 02:22:36