Django子模板可以创建新块作为钩子

时间:2012-09-24 11:11:35

标签: django django-templates

我有以下情况:

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中包含所有可能的钩子?

1 个答案:

答案 0 :(得分: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>