1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Refactored listing template subdirectories in apps.

This change has the nice side effect of removing code that ran at import
time and depended on the app registry at module level -- a notorious
cause of AppRegistryNotReady exceptions.
This commit is contained in:
Aymeric Augustin
2014-11-10 21:04:04 +01:00
parent cd7146debe
commit d58597a7b8
3 changed files with 34 additions and 27 deletions

29
django/template/utils.py Normal file
View File

@@ -0,0 +1,29 @@
import os
import sys
from django.apps import apps
from django.utils import lru_cache
from django.utils import six
@lru_cache.lru_cache()
def get_app_template_dirs(dirname):
"""
Return an iterable of paths of directories to load app templates from.
dirname is the name of the subdirectory containing templates inside
installed applications.
"""
if six.PY2:
fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
template_dirs = []
for app_config in apps.get_app_configs():
if not app_config.path:
continue
template_dir = os.path.join(app_config.path, dirname)
if os.path.isdir(template_dir):
if six.PY2:
template_dir = template_dir.decode(fs_encoding)
template_dirs.append(template_dir)
# Immutable return value because it will be cached and shared by callers.
return tuple(template_dirs)