从包含的子模板填充父模板的块
我刚开始学习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 标签应该是模板中的第一个标签。在它之前的内容会正常打印出来,可能会造成混淆。