11

私の質問をより明確に説明するために、次のコンテンツを含むinclude.htmlテンプレートがあるとします。

{% block test_block %}This is include{% endblock %}

次のようなコンテンツを含むparent.htmlという別のテンプレートがあります。

This is parent

{% include "include.html" %}

次に、parent.htmlを拡張するchild.htmlというテンプレートを作成します。

{% extends "parent.html" %}
{% block test_block %}This is child{% endblock %}

私の考えでは、child.htmlをレンダリングするときに、child.htmlのtest_blockがinclude.htmlのtest_blockを上書きする可能性があります。私の理解では、テンプレートが含まれている場合、それはそのまま含まれます。したがって、私の場合、parent.htmlは次のようになります。

This is parent

{% block test_block %}This is include{% endblock %}

したがって、child.htmlはtest_blockを上書きできるはずです。しかし、それはできないようです。なんで?回避策はありますか?

4

1 に答える 1

13

テンプレートを含めると、テンプレートがレンダリングされ、レンダリングされたコンテンツが含まれます。

ジャンゴのドキュメントから:

include タグは、「このサブテンプレートを解析し、親の一部であるかのようにそのコンテンツを含める」のではなく、「このサブテンプレートをレンダリングして HTML を含める」の実装と見なす必要があります。これは、インクルードされたテンプレート間で状態が共有されないことを意味します。各インクルードは完全に独立したレンダリング プロセスです。

回避策は、インクルードテンプレートではなく、インクルード テンプレートをテンプレートで拡張することです。次に、子テンプレートを含めます。

于 2010-10-21T03:01:35.803 に答える