1

我有以下情况:

base.html:

{% block content %}{% endblock %}

child.html:

{% extends 'base.html' %}
{% block content %}
   <p>Overriding content</p>
{% endblock %}
{% block child_block %}{% endblock %}

child_of_child.html:

{% extends 'child.html' %}
{% block child_block %}
   <p>Overriding child</p>
{% endblock %}

在 child.html 中创建一个新块 child_block 并让 child_of_child.html 扩展 child.html 并覆盖此块不起作用,直到我在 base.html 中也包含 child_block 作为钩子。

除了根模板之外,是否不能创建新的模板块/钩子?如果是这样,有没有办法绕过它而不必在 base.html 中包含所有可能的钩子?

4

1 回答 1

6

问题是您的child_block块并不存在于 中base.html的任何地方,因为它位于现有块之外。渲染模板时它会出现在哪里?根本没有为它定义的地方。

子模板在其他块内定义块是完全可以的,然后由更多的子代填充。因此,例如:

{% extends 'base.html' %}
{% block content %}
   <p>Overriding content</p>
   {% block child_block %}{% endblock %}
{% endblock %}

工作得很好,你的结果将是:

<p>Overriding content</p>
<p>Overriding child</p>
于 2012-09-24T12:18:11.680 回答