您可以在 Flask/Jinja 中创建组件以插入各种模板吗

Ari*_*Ari 5 python jinja2

假设我制作了一个非常酷的搜索框布局,我想重用它

例如。

<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) 模板引擎参数化可重用块

  • 如果我想在这个宏中包含 JavaScript 并且可以在其他地方重用,我该如何实现呢? (2认同)

Adr*_*upa 7

用于include将整个模板文件包含在当前模板、文档中

文档中的示例:

{% include 'header.html' %}
    Body
{% include 'footer.html' %}
Run Code Online (Sandbox Code Playgroud)