【发布时间】:2014-10-27 07:22:27
【问题描述】:
假设我有这个带有宏的模板(这些是简化的):
{# macros.html #}
{% macro a(opts = {}) %}
{{ opts.a }}
{% endmacro %}
{% macro b(opts = {}) %}
{{ opts.b }}
{% endmacro %}
这个包含覆盖
{# macros_override.html #}
{% macro a(opts = {}) %}
Overridden: {{ opts.a }}
{% endmacro %}
然后我想在同一个命名空间macros下拥有一个包含所有这些宏的模板
{# template.html #}
{% import 'macros.html' as macros %}
{% import 'macros_override.html' as macros %}
{{ macros.a({ 'a': 'foo' }) }}
{{ macros.b({ 'b': 'bar' }) }}
以及我期望的输出:
Overridden: foo
bar
但是b 是未定义的。我尝试将macros_override.html 模板更改为:
{# macros_override.html #}
{% extends 'macros.html' %}
{% macro a(opts = {}) %}
Overridden: {{ opts.a }}
{% endmacro %}
然后只导入覆盖模板作为宏,但在这种情况下宏a 没有被覆盖,我真的不知道为什么。
我可以以某种方式通过另一个导入覆盖 jinja 中导入的宏吗?
【问题讨论】:
标签: jinja2