在jinja2中的几个地方重用一段代码

时间:2014-01-22 06:02:04

标签: flask jinja2

我有这个html片段,需要在jinja2模板的很多地方使用:

<div class="usedalot">{{  somevalue }}</div>

例如,在template1.html,template2.html中。 template3.html,这段代码重复了几个地方

<!-- template1.html, template2.html. template3.html -->
<div class="usedalot">{{  somevalue }}</div>
......
<div class="usedalot">{{  somevalue }}</div>
....
<div class="usedalot">{{  somevalue }}</div>
......

有没有使用此代码段作为块而不是复制和粘贴? jinja2模板继承(带有块)似乎无法解决这个问题。

2 个答案:

答案 0 :(得分:35)

您要找的是macro

将宏放在单独的文件中(例如macros.html)。

{% macro usedalot(somevalue) %}
    <div class="usedalot">{{ somevalue }}</div>
{% endmacro %}

然后,您可以在其他模板中导入宏

{% from 'macros.html' import usedalot %}

然后在需要时使用它们

{{ usedalot(1) }}

这将输出

<div class="usedalot">1</div>

答案 1 :(得分:4)

从Jinja 2.8开始,您现在还可以使用块分配将一个块(仍然只能定义一次)映射到一个可以在文档中多次使用的变量。

文档位于:Block assignments

我只是使用该功能将HTML页面标题栏放到title元素以及Facebook的opengraph:title属性的meta属性中。

Array
(
    [DataSet] => Array
        (
            [Table] => Array
                (
                    [0] => Array
                        (
                            [Driver] => John Doe
                            [Shift Date] => 2018-01-05T00:00:00-05:00

在我看来,这比定义宏要干净得多。