1. ホーム
  2. python

[解決済み] django テンプレート: include と extends

2022-09-18 09:08:48

質問

同じ内容を2つのベースファイルで提供したいのですが。

というわけで、こんなことをやろうとしています。

page1.html。

{% extends "base1.html" %}
{% include "commondata.html" %}

page2.htmlを参照してください。

{% extends "base2.html" %} 
{% include "commondata.html" %}

問題は、extendsとincludeの両方が使えないようなのです。 それを行うための何らかの方法はありますか? また、そうでない場合、どのように私は上記を達成することができますか?

commondata.htmlはbase1.htmlとbase2.htmlの両方で指定されているブロックをオーバーライドします。

この目的は、同じページをpdfとhtmlの両方のフォーマットで提供することですが、フォーマットが若干異なります。 しかし、上記の質問は、私がやろうとしていることを単純化するので、もし私がそれに対する答えを得ることができれば、それは私の問題を解決することになります。

どのように解決するのですか?

extends テンプレートタグを使うときは、現在のテンプレートが他のテンプレートを拡張してい る、つまり、親テンプレートに依存する子テンプレートである、と言っていることにな ります。 Django はあなたの子テンプレートを見て、その内容を親テンプレートに反映させるために使用します。

子テンプレートで使いたいものは全てブロック内に置く必要があり、Django はそれを使って親テンプレートを生成します。 もし子テンプレートで include 文を使いたいなら、Django がそれを理解できるように、ブロック内に置かなけれ ばなりません。 そうでないと、意味がなく、 Django はそれをどうしたらいいのかわかりません。

Django のドキュメントには、親テンプレートのブロックを置き換えるためにブロックを使用する、実に良い例がいくつかあります。

https://docs.djangoproject.com/en/dev/ref/templates/language/#template-inheritance