30 lines
931 B
Python
30 lines
931 B
Python
|
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)
|