2016-12-10 26 views
-2

ここでDjangoテンプレートの奇妙な名前空間 - なぜですか?

polls/templates/polls/index.html 

、フォルダ「世論調査」はappフォルダで、それは「myprojectの内側に位置しています:Django tutorialは、それはあなたがそうのようなフォルダに「ポーリングアプリ」のためのテンプレートを置く必要があることをあなたに説明します'フォルダー。今、私たちは(むしろ別の世論調査のサブディレクトリを作成するよりも)世論調査/テンプレートで直接 当社のテンプレートを入れて逃げることができるかもしれません

を名前空間を

テンプレート:

彼らは具体的には、以下に言及します、 しかし実際は悪い考えです。 Djangoは名前が一致する最初の テンプレートを選択し、別のアプリケーションで同じ名前の というテンプレートがある場合、Djangoは を区別できません。 Djangoには を指摘できる必要があります。これを確実にする最も簡単な方法は、名前空間を使用することです。 つまり、これらのテンプレートを という名前の別のディレクトリの中に置くことによって、アプリケーション自体を作成します。

私にとっては、Djangoテンプレートの実装で間違いのようです。具体的には、テンプレートローダーが意図的に情報を無視しているように見えます。つまり、./polls/templatesのパスから取得した 'polls'です。

私の質問は:

私の知る限り、それはappディレクトリからアプリ名を収集するように1はテンプレートローダを作っている可能性が言うことができるように。そうすれば、appディレクトリ内のtemplatesフォルダ内にappのような別のディレクトリを作成する必要はありません。

何か不足していますか? テンプレートフォルダ内のフォルダが必要になったのはなぜですか?

答えて

0

すべてのテンプレートソースが同じ名前空間に寄与します。最初は気にならないかもしれませんが、これは他のアプリのテンプレートを定義したり上書きすることができます。そうしないと、django.contrib.authに必要なテンプレートを定義できなくなり、デフォルトの管理用テンプレートを上書きすることができなくなります。

なぜ、私たちは最初に別々のテンプレートフォルダを持っていますか?

テンプレートはさまざまなソースから来ているためです。いくつかはDjangoにバンドルされているものもあれば、サードパーティ製のものがあり、プロジェクトの中であなたが定義したものもあります。単一のテンプレートフォルダを使用するには、必要なテンプレートをDjangoやサードパーティのアプリケーションからコピーする必要があります。

templates/polls/ディレクトリは、ではなく、以外のテンプレートを上書きするテンプレートの名前の衝突を避けるための単なる規則です。

あなたが説明した動作を実装するサードパーティ製のアプリがいくつかありますが、私が知っている限り、それは決して捕まえていません。テンプレートシステムの機能を制限するだけで、ほとんど利益を得られません。

関連する問題