プロジェクトを設定し、アプリを非依存に保つために作業している間に、私はひっかかった。さまざまなアプリのすべてのテンプレートに、一貫したヘッダーとフッターが必要です。私がしようとしているものは次のとおりです。
myproject/
base/
templates/
header.html
footer.html
app1/
templates/
my_app1_page.html -> want to include 'header.html'
and 'footer.html' from base app
これを実行したいアプリが他にもたくさんあります。これは可能ですか、それとも正しい方法ですか?
アプリがINSTALLED_APPSにあり、アプリのテンプレートローダーが有効になっている限り、別のアプリのテンプレートを含めることができます。
{% include "header.html" %}
...テンプレートはアプリのテンプレートディレクトリに直接配置されるためです。一般的に、名前の衝突を避けるために、以下を使用することをお勧めします。
app1/
templates/
app1/
page1.html
page2.html
app2/
templates/
app2/
page1.html
page2.html
{% include "app1/page1.html" %}
または{% include "app2/page1.html" %}
...
ただし:一貫したルックアンドフィールを維持するには、インクルードするよりもテンプレートの継承を使用する方がはるかに優れています。テンプレートの継承は、本当に良いこと Djangoテンプレートシステムの1つです。意味のある場合は常に、インクルージョンよりも継承を選択します(ほとんどの場合)。
私の推奨事項:
{%block content%}
を含むプロジェクトのベーステンプレート( "base.html"がデフォルトの規則です)を用意します。{% extends "base.html" %}
フォームを継承させ、コンテンツセクションをオーバーライドしますドキュメントへのリンクについては、この質問に対する別の回答をご覧ください
include tag を使用して絶対パスを指定することで確かにそれを行うことができますが、Djangoで作業する適切な方法は Template inheritance を使用することです=。