11

为了更清楚地说明我的问题,假设我有一个包含内容的 include.html 模板:

{% block test_block %}This is include{% endblock %}

我有另一个名为 parent.html 的模板,其内容如下:

This is parent

{% include "include.html" %}

现在我创建了一个名为 child.html 的模板,它扩展了 parent.html:

{% extends "parent.html" %}
{% block test_block %}This is child{% endblock %}

我的想法是在渲染child.html时,child.html中的test_block可以覆盖include.html中的那个。据我了解,当包含模板时,它会按原样包含在内。所以就我而言,我认为 parent.html 等于:

This is parent

{% block test_block %}This is include{% endblock %}

所以 child.html 应该能够覆盖 test_block。但是好像不能。为什么?有解决方法吗?

4

1 回答 1

13

包含模板时,它会呈现模板,然后包含呈现的内容。

来自 django 文档:

包含标签应被视为“渲染此子模板并包含 HTML”的实现,而不是“解析此子模板并包含其内容,就好像它是父模板的一部分一样”。这意味着包含的模板之间没有共享状态——每个包含都是一个完全独立的渲染过程。

一种解决方法是让子模板扩展包含的模板而不是包含的模板。然后,包含子模板。

于 2010-10-21T03:01:35.803 回答