Jinja2(Flask)模板引擎的参数化可重用块

11 投票
2 回答
5338 浏览
提问于 2025-04-17 17:17

在Jinja2模板引擎(使用Flask)中,我想实现这样的功能:

{% reusable_block avatar(user) %}
     <img src='{{ user.avatar }}' title='{{ user.name }}'/> 
{% reusable_block %}

然后在不同的地方使用:

{% for u in users %}
    {% call avatar(u) %}
{% endfor %}

但是我在Jinja的文档中找不到这样的功能(我为了这个问题编造了reusable_blocks)。我需要的基本上是可以重复使用的模块,并且能够接收参数。有没有人知道我该如何在Jinja2中做到这一点?

2 个回答

2

我觉得你是在找

15

你可以使用宏。

{% macro input(name, value='', type='text', size=20) -%}
    <input type="{{ type }}" name="{{ name }}" value="{{value|e }}" size="{{ size }}">
{%- endmacro %}


<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>

更多文档请查看 这里

撰写回答