jinja2从模板加载模板文件

时间:2011-09-07 17:11:19

标签: jinja2

有没有办法可以从另一个模板文件中加载jinja2模板?像

这样的东西
{{ render_template('path/to/file.html') }}

我有一些我想重复使用的片段,因此拥有此功能对我很重要。

3 个答案:

答案 0 :(得分:30)

{% include "file" %}这样做。有关详细信息,请参阅jinja2 docs

答案 1 :(得分:7)

使用extends标记或include标记,具体取决于您希望如何设计多文件视图。

答案 2 :(得分:5)

您应使用{% macro -%}个模板文件,并使用{% import "file" as file %}来使用其他模板文件中的宏。参见the docs.

这里是一个例子:

<!- in common_macros.html ->
{% macro common_idiom1(var1, var2, ... varN) -%}
    <!- your idiom, where you can use var1 through varN ->
{%- endmacro %}
<!- in my_template.html ->
{% import "common_macros.html" as idioms %}
{{ idioms.common_idiom1(a, b, ... N) }}

具体来说,此答案允许OP将参数传递给他的宏,类似于他想要的行为,例如render_template的行为(仅包含文件,因为前面的答案已经说明了,其行为与render_template相同)。

这通常比为每个习语制作一个新的模板要好,或者比使用继承(这是一种特殊情况的解决方案)(如果要在一个模板中多次使用代码段)要好吗?