我有这个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模板继承(带有块)似乎无法解决这个问题。
答案 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
在我看来,这比定义宏要干净得多。