Jinja2的块和包含继承

20 投票
1 回答
17649 浏览
提问于 2025-04-17 12:52

我搞不清楚怎么用Jinja2修改包含模板中的块。这里有个例子,我用到了三个文件。

base.html:

<html>{% include "content.html" %}</html>

content.html:

<h1>{% block title %}Title{% endblock title%}</h1>
<div>{% block content_body %}Content Body{% endblock content_body%}</div>

story.html:

{% extends "base.html" %}
{% block title %}story.title{% endblock title %}
{% block content_body %}story.description{% endblock content_body %}

当我渲染story.html的时候,我会得到:

<html>
<h1>Title</h1>
<div>Content Body</div>
</html>

我该怎么渲染才能得到预期的值呢?

1 个回答

15

base.html没有被渲染是因为没有其他模板调用它。你可以做的是进行第二层的扩展:

base.html:

<html>{% block html %}{% endblock %}</html>

content.html:

{% extends "base.html" %}
{% block html %}
<h1>{% block title %}Title{% endblock title%}</h1>
<div>{% block content_body %}Content Body{% endblock content_body%}</div>
{% endblock %}

不过,这样做可能有点多余,你会发现一个基础模板就足够了(也就是说,可以把base.htmlcontent.html合并成一个模板)。

撰写回答