Properly app_template_dirs when INSTALLED_APPS change.

This commit is contained in:
Florian Apolloner 2013-12-27 11:17:25 +01:00
parent 025ec2e7fe
commit 6aa1a31660
2 changed files with 18 additions and 12 deletions

View File

@ -13,19 +13,22 @@ from django.template.loader import BaseLoader
from django.utils._os import safe_join from django.utils._os import safe_join
from django.utils import six from django.utils import six
# At compile time, cache the directories to search.
if six.PY2: def calculate_app_template_dirs():
if six.PY2:
fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
app_template_dirs = [] app_template_dirs = []
for app_config in apps.get_app_configs(): for app_config in apps.get_app_configs():
template_dir = os.path.join(app_config.path, 'templates') template_dir = os.path.join(app_config.path, 'templates')
if os.path.isdir(template_dir): if os.path.isdir(template_dir):
if six.PY2: if six.PY2:
template_dir = template_dir.decode(fs_encoding) template_dir = template_dir.decode(fs_encoding)
app_template_dirs.append(template_dir) app_template_dirs.append(template_dir)
return tuple(app_template_dirs)
# It won't change, so convert it to a tuple to save memory.
app_template_dirs = tuple(app_template_dirs) # At compile time, cache the directories to search.
app_template_dirs = calculate_app_template_dirs()
class Loader(BaseLoader): class Loader(BaseLoader):

View File

@ -33,6 +33,9 @@ def update_installed_apps(**kwargs):
# Rebuild any AppDirectoriesFinder instance. # Rebuild any AppDirectoriesFinder instance.
from django.contrib.staticfiles.finders import get_finder from django.contrib.staticfiles.finders import get_finder
get_finder.cache_clear() get_finder.cache_clear()
# Rebuild app_template_dirs cache.
from django.template.loaders import app_directories as mod
mod.app_template_dirs = mod.calculate_app_template_dirs()
@receiver(setting_changed) @receiver(setting_changed)