2012-12-11 83 views
4

我通過獅身人面像使用jinja2。在我的基本模板(的layout.html我有一些一些宏觀如何在jinja2中重新定義宏

{%- macro post_meta(metadata) -%} 
    <div class="postmeta"> 
     {{ author(metadata.author) }} 
    </div> 
{%- endmacro -%} 

我延伸THEME2此模板{%- extends "theme1/layout.html" -%}

我怎樣才能在THEME2?簡單的將重新定義post_metapost_meta的新定義theme2不能正常工作

順便說一句如何使用python buildin函數on像:

{{ type(metadata) }} 

回答

5

Q1:您必須創建一個塊來覆蓋您的基本模板中的宏塊。這是孩子的代碼。隨着use_child =假:在基本模板的宏將被用於

{% block pm_mac %} 
    {% if use_child %} 
     {%- macro post_meta(metadata) -%} 
       ..... 
     {%- endmacro -%} 
    {% else %}   
     {{ super() }} 
    {% endif %} 
{% endblock %} 

Q2:你需要註冊一個全球性的Python函數使用類型:

def py_to_upper(a): 
    return a.upper() 

env.globals['to_upper'] = py_to_upper # register the global python function 


and in the Jinja template : 

{{ to_upper("lowercase") }} 
+1

謝謝! Q1的解決方案看起來像骯髒的解決方法,但似乎沒有乾淨的解決方案。 –