すべてのテンプレートディレクトリは1つのテンプレートディレクトリのサブフォルダであるため、ローダーに最初にそこを参照させる必要がありました。
これがテンプレートのキャッシュを壊すかどうか/どのように壊すかはテストしていませんが、AFAICTの動作は変わりません。
alternative_path.py
これは、次のようなモジュールでベースローダーを拡張することによって行いました。
class Loader(filesystem.Loader):
"""
Looks for templates in an alternative path.
Allows a template to extend a template which is located in a specified views path.
"""
is_usable = True
__view_paths = None
def __init__(self, views_path):
if Loader.__view_paths is None:
Loader.__view_paths = [views_path]
def get_alternative_template_sources(self, template_name):
for template_dir in Loader.__view_paths:
try:
yield safe_join(template_dir, template_name)
except UnicodeDecodeError:
# The template dir name was a bytestring that wasn't valid UTF-8.
raise
except ValueError:
# The joined path was located outside of this particular
# template_dir (it might be inside another one, so this isn't
# fatal).
pass
def get_template_sources(self, template_name, template_dirs):
return itertools.chain(
filesystem.Loader.get_template_sources(self, template_name, template_dirs),
Loader.get_alternative_template_sources(self, template_name))
次に、同じモジュールで:
_loader = Loader
次にmain.py
:
def main():
views_path = os.path.join(os.path.dirname(__file__), 'templates')
settings.TEMPLATE_LOADERS = (('web.rich.templates.alternative_path.Loader', views_path),
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader')