我有这个html片段需要在jinja2模板中的很多地方使用:
<div class="usedalot">{{ somevalue }}</div>
Run Code Online (Sandbox Code Playgroud)
例如,在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>
......
Run Code Online (Sandbox Code Playgroud)
而不是复制和粘贴,有没有什么可以使用此代码片段作为块?jinja2模板继承(带块)似乎没有解决这个问题.
dir*_*irn 38
您正在寻找的是一个宏.
宏被放置在单独的文件中(例如,macros.html).
{% macro usedalot(somevalue) %}
<div class="usedalot">{{ somevalue }}</div>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在其他模板中导入宏
{% from 'macros.html' import usedalot %}
Run Code Online (Sandbox Code Playgroud)
然后在需要时使用它们
{{ usedalot(1) }}
Run Code Online (Sandbox Code Playgroud)
这将输出
<div class="usedalot">1</div>
Run Code Online (Sandbox Code Playgroud)
从Jinja 2.8开始,您现在还可以使用块分配将一个块(仍然只能定义一次)映射到一个可以在文档中多次使用的变量。
文档位于:块分配
我只是使用该功能将HTML页面标题栏放到title元素以及Facebook的opengraph:title属性的meta属性中。
{% set title_s %}{% block title %}MY DEFAULT TITLE{% endblock %}{% endset %}
<head>
<meta property="og:title" content="{{ title_s }}" />
<title>{{ title_s }}</title>
...
</head>
Run Code Online (Sandbox Code Playgroud)
在我看来,这比定义宏要干净得多。
| 归档时间: |
|
| 查看次数: |
6464 次 |
| 最近记录: |