Jinja2导入上下文不遵循多个扩展

时间:2017-08-16 13:05:36

标签: flask jinja2

我有一个导入全局宏的主模板。另一个模板扩展了站点的一部分的主模板。节模板导入带有上下文的节 - 全局宏。在section-global宏中,通过导入的名称访问全局宏。

(为简单起见,我已经减少了模板。)

master.html

{% import 'global_macros.html' as m %}
<html>
<body>
{% block body %}{% endblock %}
</body>
</html>

section.html

{% extends 'master.html' %}
{% import 'section_macros.html' as m_section with context %}

global_macros.html

{% macro some_macro() %}
this is a macro!
{% endmacro %}

section_macros.html

{% macro something() %}
{{ m.some_macro() }}
{% endmacro %}

这不能按预期工作:引发UndefinedError并且未定义导入的全局宏名称(m)。全局宏在所有子模板中都有效;只是不在导入的宏中。

如果我将全局宏直接导入到部分宏文件中,它可以正常工作:

section_macros.html

{% import 'global_macros.html' as m %}
{% macro something() %}
{{ m.some_macro() }}
{% endmacro %}

或者如果我将全局宏导入到部分模板中,它可以正常工作:

section.html

{% extends 'master.html' %}
{% import 'global_macros.html' as m %}
{% import 'section_macros.html' as m_section with context %}

根据我对Jinja和范围的理解,m变量应该从主服务器传递给部分宏模板,因为我已经给它了所需的上下文,而m变量是部分模板及其子项中可用。

我做错了吗?或者这是Jinja的限制或错误?

0 个答案:

没有答案