我有一个导入全局宏的主模板。另一个模板扩展了站点的一部分的主模板。节模板导入带有上下文的节 - 全局宏。在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的限制或错误?