Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Properly app_template_dirs when INSTALLED_APPS change.

  • Loading branch information...
commit 6aa1a316604c063db88a8aa4cd2f25065ae1394c 1 parent 025ec2e
@apollo13 apollo13 authored
Showing with 18 additions and 12 deletions.
  1. +15 −12 django/template/loaders/app_directories.py
  2. +3 −0  django/test/signals.py
View
27 django/template/loaders/app_directories.py
@@ -13,19 +13,22 @@
from django.utils._os import safe_join
from django.utils import six
+
+def calculate_app_template_dirs():
+ if six.PY2:
+ fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
+ app_template_dirs = []
+ for app_config in apps.get_app_configs():
+ template_dir = os.path.join(app_config.path, 'templates')
+ if os.path.isdir(template_dir):
+ if six.PY2:
+ template_dir = template_dir.decode(fs_encoding)
+ app_template_dirs.append(template_dir)
+ return tuple(app_template_dirs)
+
+
# At compile time, cache the directories to search.
-if six.PY2:
- fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
-app_template_dirs = []
-for app_config in apps.get_app_configs():
- template_dir = os.path.join(app_config.path, 'templates')
- if os.path.isdir(template_dir):
- if six.PY2:
- template_dir = template_dir.decode(fs_encoding)
- app_template_dirs.append(template_dir)
-
-# It won't change, so convert it to a tuple to save memory.
-app_template_dirs = tuple(app_template_dirs)
+app_template_dirs = calculate_app_template_dirs()
class Loader(BaseLoader):
View
3  django/test/signals.py
@@ -33,6 +33,9 @@ def update_installed_apps(**kwargs):
# Rebuild any AppDirectoriesFinder instance.
from django.contrib.staticfiles.finders import get_finder
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)

1 comment on commit 6aa1a31

@jezdez
Owner

"calculate" eh?

Please sign in to comment.
Something went wrong with that request. Please try again.