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

mzu*_*mzu 1 django django-templates

我有以下场景:

base.html文件:

{% block content %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

child.html:

{% extends 'base.html' %}
{% block content %}
   <p>Overriding content</p>
{% endblock %}
{% block child_block %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

child_of_child.html:

{% extends 'child.html' %}
{% block child_block %}
   <p>Overriding child</p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*man 6

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

子模板在其他块中定义块然后由其他块填充,这是完全可以的.所以,例如:

{% extends 'base.html' %}
{% block content %}
   <p>Overriding content</p>
   {% block child_block %}{% endblock %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

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

<p>Overriding content</p>
<p>Overriding child</p>
Run Code Online (Sandbox Code Playgroud)