2

別のテンプレートを含むテンプレートがあります。この含まれているテンプレートには、ブロック タグが含まれています。

例:

base.html

BASE
{% block title %}Base Title{% endblock %}
{% block content %}{% endblock %}

template1.html

{% extends 'base.html' %}
{% block title %}Extended Title{% endblock %}
{% block content %}
   Extended content
   {% include 'include.html' %}
{% endblock %}

include.html

{% block title %}Include Title{% endblock %}
{% block another_content %}Include Content{% endblock %}

私が期待しているのは、1.1.1 で行う template.html をレンダリングする場合です。

BASE
Extended Title
Extended content
Include Title
Include Content

しかし、1.2.1 と 1.2.3 に切り替えると、実際に次のようになります。

BASE
Extended Title
Extended Content
Extended Title
Include Content

ご覧のとおり、include.html のタイトル ブロックは template1.html のタイトル ブロックに置き換えられます。この置換は、ブロック名が同じ場合にのみ発生するため、include.html でタイトル ブロックを変更しても発生しません。それが同時に含まれているように私には思えますか?これが予想されるかどうか誰にもわかりますか/私は何か間違ったことをしていますか?

4

2 に答える 2

3

inを使用していない 場合、この動作は正常です。1.1.1 にバグがあったと思います。extendsinclude.html

公式ドキュメントからの抜粋:

最後に、同じテンプレートで同じ名前の複数の {% block %} タグを定義できないことに注意してください。この制限が存在するのは、ブロック タグが「双方向」で機能するためです。つまり、ブロック タグは埋める穴を提供するだけでなく、親の穴を埋めるコンテンツも定義します。テンプレートに同様の名前の {% block %} タグが 2 つある場合、そのテンプレートの親はブロックのコンテンツのどれを使用するかを認識できません。

ここですべてを読んでください:テンプレートの継承

于 2010-09-26T13:14:45.093 に答える
-1

それが必要な場合は、include.html にブロックをまったく含めないでください。つまり、次のようにします。

Include Title
Include Content
于 2010-09-28T05:47:45.207 に答える