我正在通过sphinx使用jinja2。在我的基本模板中( layout.html 我有一些宏
{%- macro post_meta(metadata) -%}
<div class="postmeta">
{{ author(metadata.author) }}
</div>
{%- endmacro -%}
我正在使用{%- extends "theme1/layout.html" -%}
如何在 theme2 中重新定义post_meta
?简单地将post_meta
的新定义放在 theme2 中是行不通的。
顺便说一下我怎样才能使用python buildin函数:
{{ type(metadata) }}
答案 0 :(得分:5)
Q1:你必须创建一个块来覆盖基础模板中宏的块。这是孩子的代码。使用use_child = False:将使用基本模板中的宏
{% 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") }}