6

我正在通过 sphinx 使用 jinja2。在我的基本模板(layout.html我有一些宏

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

我在theme2中扩展了这个模板{%- extends "theme1/layout.html" -%}

如何post_metatheme2中重新定义?post_meta简单地在theme2中添加新定义是行不通的。

顺便说一句,我如何使用 python 内置函数,如:

{{ type(metadata) }}
4

1 回答 1

7

Q1:您必须创建一个块以使用基本模板中的宏覆盖该块。这是孩子的密码。使用 use_child = False :将使用基本模板中的宏

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

Q2:您必须注册一个全局 Python 函数才能使用 type :

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") }}   
于 2012-12-12T02:21:18.827 回答