Django – テンプレートの場所

概要

  • Djangoのテンプレートファイルは、テンプレートディレクトリーやそのサブディレクトリーに置かれることを想定している
  • 複数場所に配置されたテンプレートディレクトリー以下が一括して探索される
  • 探索場所と順序はsettings.pyファイルのTEMPLATESの設定に従う
    • DIRSでは任意の場所・名前でテンプレートディレクトリーを追加できる
    • APP_DIRSTrueに設定されている場合、各アプリケーションディレクトリー下のtemplatesディレクトリーが探索される
  • 探索されたテンプレートを参照する場合、テンプレートディレクトリーからの相対パスで指定する
  • テンプレートディレクトリーを分散配置しても一括して検索されるため、各テンプレートディレクトリーに適切なサブディレクトリーを置いて、その下にテンプレートファイルを置くのが一般的

確認用プロジェクト

確認のためtemplatetestプロジェクトを準備し、app1app2の2つのアプリケーションを作成する。templatesディレクトリーとそのサブディレクトリーを以下のように作成し、4つの場所に即した内容のindex.htmlファイルを置く。

各場所のindex.htmlは、title要素/bodyp要素で以下を表示させるようにした。

  • App1/Under the app1 directory
  • App2/Under the app2 directory
  • Subirectory/Under the subdirectory
  • Base Directory/Under the base directory

そしてapp1のビューファイルで指定するテンプレート名のディレクトリー名を変更しながら、各場所のindex.htmlが読み込まれたかどうか確認する。

プロジェクトの完成後、template変数に設定した文字列を以下のように変更して、それぞれに対応したページが表示されるかどうかを確認する。

  • 'base/index.html'
  • 'subdirectory/index.html'
  • 'app1/index.html'
  • 'app2/index.html'

TEMPLATESの初期設定

初期状態でのTEMPLATESは以下の通り。

このうちテンプレートの探索場所は'DIRS''APP_DIRS'で設定される。

なおディレクトリーの探索場所が設定されていれば、そのサブディレクトリー下も再帰的に探索される。

DIRSでの設定

プロジェクトディレクトリー直下

'DIRS'にはプロジェクト内任意の場所の、任意の名前のディレクトリーを設定できる。たとえばプロジェクトディレクトリー直下に置いたtemplatesを探索させるなら以下のように記述する。

または

後者の場合、settings.pyではimport osがないので追加が必要。

この設定により、'templatetest/templates/base/index.html'のレンダリングが可能になる。

サブディレクトリー下

プロジェクトの設定ファイル群があるサブディレクトリー下(この場合configディレクトリー)にあるディレクトリーを探索させるときは以下のように相対パスで設定する。

または

この場合もsettings.pyimport osが必要。

この設定により、templatetest/config/subdirectory/templates/index.htmlのレンダリングが可能になる。

APP_DIRSの設定

また、'APP_DIRS'Trueに設定されている場合は、各アプリケーションディレクトリー下にあるtemplatesディレクトリーが探索される。

デフォルトでTrueがセットされているので、アプリケーションディレクトリー下にtempratesディレクトリーがあれば全て探索される。

この例の場合、app1/templatesapp2/templatesは、デフォルトの設定)のままでそれぞれのサブディレクトリーも含めて探索される。

この結果templatetest/app1/templates/app1/index.htmltemplatetest/app2/templates/app2/index.htmlのレンダリングが可能になる。

全てを探索させるTEMPLATESの設定

これまでの4つの場所のすべてを探索対象とするには、settings.pyTEMPLATESを以下のように設定する。

この結果、以下の4つが探索可能になる。

  • templatetest/templates/base/index.html
  • templatetest/config/templates/subdirectory/index.html
  • templatetest/app1/templates/app1/index.html
  • templatetest/app2/templates/app2/index.html

templatesのサブディレクトリー

特にアプリケーションディレクトリー下にテンプレートを置く場合に、(index.htmlのように)同じ名前のファイルが重複しないよう、サブディレクトリーを設けるのが一般的。

通常、サブディレクトリー名はアプリケーションディレクトリー名と同じとする。冗長だが重複が防止され、可読性も保たれる。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です