假设我制作了一个非常酷的搜索框布局,我想重用它
例如。
<div class='someClass'>
<input class='fancyInput'>
</div>
Run Code Online (Sandbox Code Playgroud)
是否可以在其他模板中以与扩展模板相同的方式重用该片段,而是“导入”一个片段可以这么说。像`{%extend %}的储备
我想要一些可以重复使用的 html 块,但可以根据页面插入不同的区域。
目前,每次我想使用该 HTML 块时,我都必须对其进行硬编码。
这是一个伪 html/jinja 示例
片段
{% component fancyInput %} # not real jinja
<div class='someClass'>
<input class='fancyInput'>
</div>
{% endcomponent %}
Run Code Online (Sandbox Code Playgroud)
然后让我们在某个地方的随机页面上说
<html>
<body>
<div class='container'><p>Some text!</p></div>
{% import component fancyInput}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
呈现的 HTML 将是
<html>
<body>
<div class='container'>
<p>Some text!</p>
</div>
<div class='someClass'>
<input class='fancyInput'>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
小智 9
Jinja2使用宏。一旦定义了宏,就可以调用它来渲染元素。
因此,如果您在模板中定义一个宏,例如:
{% macro newComponent(text) -%}
<div class='container'><p>{{text}}</p></div>
{%- endmacro %}
Run Code Online (Sandbox Code Playgroud)
然后它可以在任何文件中调用
{{ newComponent('Insert Text') }}
Run Code Online (Sandbox Code Playgroud)
这是文档的链接
还有关于宏的堆栈溢出帖子 使用 Jinja2 (Flask) 模板引擎参数化可重用块
用于include将整个模板文件包含在当前模板、文档中
文档中的示例:
{% include 'header.html' %}
Body
{% include 'footer.html' %}
Run Code Online (Sandbox Code Playgroud)