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 に答える