Django1.0 でのテンプレートファイルの扱いが気持ち悪い
テンプレートファイルをアプリ毎に同名で配置した場合、テンプレートローダのサーチ順により、先に見つけた方が採用されてしまう。
これだと、テンプレートファイル名は、プロジェクト内でグローバルな位置づけになってしまい、アプリ毎の独立性を保つ事が出来ない。。。
自分で作っている範疇だと、ファイル名を分けて作ればいいんだろうけど、既存アプリや admin サイトをはじめとしたアドオン系を導入する場合に、カブってしまう可能性がある。
また、1プロジェクト内で PC サイトと携帯サイト作ったりする場合に、ファイル名を分けないといけなくなる。。。
(例)
PC: index.html
携帯: index_m.html
これだと HTML のモック作って確認したり、デザイナと分業したりする場合に、とっても面倒だと思うんですが・・・。
テンプレートローダを自作してもいいんですけど、
ここら辺どうにかキレイに実装するやり方をご存知の方、ご教示下さいm(_ _)m
(実は既存で実装されてて、xxx っていう設定すれば行ける!とか?)
具体的には、以下のように、テンプレートローダをアプリディレクトリ配下の templates サブディレクトリだけを見るように設定(※1)した場合、setting.py の INSTALLED_APPS 登録順に templates サブディレクトリが検索されるため、下記例で行くと、app_02 のテンプレート (index.html) は利用されない。
※1. "django.template.loaders.app_directories.load_template_source" のみ有効にする
(例)<ディレクトリ構成>
+ app_01 | + tempaltes | + index.html <- app_01 用のテンプレート + app_02 | + tempaltes + index.html <- app_02 用のテンプレート
[settings.py]
: #テンプレートローダ TEMPLATE_LOADERS = ( # 'django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source', ) : #テンプレートを探す場所の登録 TEMPLATE_DIRS = () : #アプリケーションの登録 INSTALLED_APPS = ( 'project_root.app_01', 'project_root.app_02', ) :