从包含的子模板填充父模板的块

0 投票
1 回答
2115 浏览
提问于 2025-04-17 21:31

我刚开始学习jinja2这个模板库。现在我有点搞不清楚,怎么才能从包含的子模板里,把内容填充到父模板的一个块里。

比如说,我有一个父模板,叫做

t-1:

<div id="includedTemplateName>
    {% block includedTemplateName %}{% endblock %}
</div>

<div id="content">
    {% include 't-2.htm' %}
</div>

还有一个子模板,叫做

t-2:

<div>
conten
</div>
{% block includedTemplateName %}t-2{% endblock %}

我想把id为 includedTemplateName 的div里的值设置为't-2',这个值是在t-2里定义的。请问我该怎么用jinja2来实现这个呢?

1 个回答

2

你把 include 语句和模板继承搞混了。include 语句的作用是把一个模板包含进来,并把那个文件渲染后的内容放到当前的命名空间里(来自 Jinja2 文档)。你的“子”模板在被包含时已经渲染好了,所以它无法改变你“父”模板里的值。

你需要使用 模板继承

t1.html:

<div id="includedTemplateName">
    {% block includedTemplateName %}{% endblock %}
</div>

<div id="content">
    {% block content %}{% endblock %}
</div>

t2.html:

{% extends "t1.html" %}
{% block includedTemplateName %}t-2{% endblock %}
{% block content %}content{% endblock %}

来自 Jinja2 文档

{% extends %} 标签是关键。它告诉模板引擎这个模板“扩展”了另一个模板。当模板系统处理这个模板时,首先会找到父模板。extends 标签应该是模板中的第一个标签。在它之前的内容会正常打印出来,可能会造成混淆。

撰写回答