我通过sphinx使用jinja2.在我的基本模板(layout.html我有一些宏
{%- macro post_meta(metadata) -%}
<div class="postmeta">
{{ author(metadata.author) }}
</div>
{%- endmacro -%}
Run Code Online (Sandbox Code Playgroud)
我正在扩展这个模板在theme2中{%- extends "theme1/layout.html" -%}
如何post_meta在theme2中重新定义?简单地post_meta在theme2中添加新定义不起作用.
顺便问一下,我怎样才能使用python buildin函数:
{{ type(metadata) }}
Run Code Online (Sandbox Code Playgroud)
Q1:你必须创建一个块来覆盖基础模板中宏的块.这是孩子的代码.使用use_child = False:将使用基本模板中的宏
{% block pm_mac %}
{% if use_child %}
{%- macro post_meta(metadata) -%}
.....
{%- endmacro -%}
{% else %}
{{ super() }}
{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
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") }}
Run Code Online (Sandbox Code Playgroud)