DjangoのTemplateローダ

2006/11/22 01:32

ueblogのスクリーンキャストに対して、 嘘の補足を行ってしまいました

嘘というのは「settings.pyのTEMPLATE_DIRSに対して設定を行わなくても、プロジェクト直下とアプリケーション直下のtemplatesディ レクトリに対してサーチパスが設定される」というものです。 正解は「自動でサーチパスが設定される場所は、settings.pyのINSTALLED_APPSに登録されている各アプリケーション直下のtemplates ディレクトリに対してのみ」です。

嘘を書いてそのままというものあれなので、動作パターンの確認を行いました。

パターン1

  • TEMPLATE_DIRSINSTALLED_APPS

  • 設定無しsample.app1

  • sample.app2

各アプリの下にサーチパスが設定されるtemplatesディレクトリを作成した。

以下、'+'はディレクトリ、'-'はファイルを表すこととする。また、test.htmlはbase.htmlを継承したテンプレートとする。

  +sample
         + app1
               + templates
                          + app1
                          - test.html
               - base.html
         + app2
               + templates
                          + app2
                          - test.html
               - base.html

パターン2

  • TEMPLATE_DIRSINSTALLED_APPS

  • 設定無しsample.app1

  • sample.app2

  +sample
         + app1
               + templates
                          + app1
                          - test.html
                          + app2
                          - test.html
               - base.html
         + app2
               + templates
                          + app2
                          - test.html
               - base.html

パターン3

  • TEMPLATE_DIRSINSTALLED_APPS

  • 設定無しsample.app2

  • sample.app1

  +sample
         + app1
               + templates
                          + app1
                          - test.html
                          + app2
                          - test.html
               - base.html
         + app2
               + templates
                          + app2
                          - test.html
               - base.html

パターン4

  • TEMPLATE_DIRSINSTALLED_APPS

  • $PROJECT_HOME/templatessample.app1

  • sample.app2

  +sample
         + app1
               + templates
                          + app1
                          - test.html
               - base.html
         + app2
               + templates
                          + app2
                          - test.html
               - base.html
         + templates
         - base.html

パターン5

  • TEMPLATE_DIRSINSTALLED_APPS

  • $PROJECT_HOME/templatessample.app1

  • sample.app2

  +sample
         + app1
               + templates
                          + app1
                          - test.html
                          + app2
                          - test.html
               - base.html
         + app2
               + templates
                          + app2
                          - test.html
               - base.html
         + templates
               + app2
               - test.html
         - base.html

パターン6

  • TEMPLATE_DIRSINSTALLED_APPS

  • $PROJECT_HOME/templates2

  • $PROJECT_HOME/templatessample.app1

  • sample.app2

  +sample
         + app1
               + templates
                          + app1
                          - test.html
                          + app2
                          - test.html
               - base.html
         + app2
               + templates
                          + app2
                          - test.html
               - base.html
         + templates
         - base.html
         + templates2
         - base.html

Templateローダの振る舞い

優先度は以下の通りと考えられる。

どのようにテンプレートを格納すべきか