jinja2从模板加载模板文件

Rom*_* M. 22 jinja2

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

{{ render_template('path/to/file.html') }}
Run Code Online (Sandbox Code Playgroud)

我有一些我想重用的片段,所以拥有这个功能对我来说很重要.

Ulr*_*gel 33

{% include "file" %}做这个.有关更多信息,请参阅jinja2文档.

  • 我阅读了文档,无法找到将`template params`传递给`include`调用的方法.你能澄清一下是否有可能吗? (5认同)

Woo*_*ble 8

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


oko*_*vko 6

您应该使用{% macro -%}s 制作模板文件,并使用{% import "file" as file %}来使用其他模板文件中的宏。参见文档。

这是一个例子:

<!- 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) }}
Run Code Online (Sandbox Code Playgroud)

具体来说,此答案允许OP将参数传递给他的宏,这与他想要的行为类似,例如render_template的行为(如上面的先前答案所述,仅包含文件并不能实现与render_template相同的行为)。

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