Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Jinja模板导入宏,而不执行模板内容_Python_Jinja2 - Fatal编程技术网

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

Python 从Jinja模板导入宏,而不执行模板内容,python,jinja2,Python,Jinja2,我想导入一个Jinja模板,它也有顶级内容,但不执行内容本身。例如: 带有_macros.html的模板_: 导入Jinja模板时,模板的内容不包括在内,但仍在执行,这意味着任何不存在的变量都会导致错误,以及执行不需要的代码时发生的其他错误 有没有一种方法可以导入Jinja模板而不执行其内容 我想这样做,而不是将宏完全分解到另一个文件中,因为这样可以更整洁地组织应用程序中的模板代码。不,没有办法这样做。Jinja模板编译为Python模块。导入模块时执行顶层代码。这同样适用于模板 {% macr

我想导入一个Jinja模板,它也有顶级内容,但不执行内容本身。例如:

带有_macros.html的模板_:

导入Jinja模板时,模板的内容不包括在内,但仍在执行,这意味着任何不存在的变量都会导致错误,以及执行不需要的代码时发生的其他错误

有没有一种方法可以导入Jinja模板而不执行其内容


我想这样做,而不是将宏完全分解到另一个文件中,因为这样可以更整洁地组织应用程序中的模板代码。

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

{% 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 %}
{% import "template_with_macros.html" as macros %}
{{ macros.link("Homepage", "/") }}