从Jinja模板导入宏而不执行模板内容

时间:2017-10-30 01:29:30

标签: python jinja2

我想import一个具有顶级内容的Jinja模板,但不会执行内容本身。例如:

template_with_macros.html:

{% macro link(text, url) %}
  <a href='{{ url }}'>{{ text }}</a>
{% endmacro %}
{% for text, url in {'Google': 'http://google.com', 'Stack Overflow': 'http://stackoverflow.com'}.items() %}
  {{ link(text, url) }}
{% endfor %}

template_that_uses_macros.html:

{% import "template_with_macros.html" as macros %}
{{ macros.link("Homepage", "/") }}

当您import使用Jinja模板时,模板的内容不会包含在内,但仍会执行,这意味着任何不存在的变量都会导致错误,以及执行不需要的代码时发生的其他不良事件。

有没有办法导入Jinja模板而不执行其内容?

我想这样做,而不是将宏分解为另一个文件,因为在我的应用程序中组织模板代码将是一种更整洁的方式。

1 个答案:

答案 0 :(得分:1)

不,没有办法做到这一点。 Jinja模板编译为Python模块。导入模块时执行顶级代码。这同样适用于模板。