diff options
| author | Preston Timmons <prestontimmons@gmail.com> | 2015-02-24 09:17:17 -0600 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-03-02 07:53:58 -0500 |
| commit | 80d6b6b863109cfb60a7fcc5936136e347ecd57a (patch) | |
| tree | 8858dfe6363807d0c2dd5ec571d452d15a8dad85 /django | |
| parent | 4b8979e477a5315f3dfde0348393fd404fb70ee4 (diff) | |
Fixed #24409 -- Combined the app_directories and filesystem loader implementation.
Besides the directories they look in, these two loaders are functionally
the same. This removes unnecessary code duplication between the two.
Diffstat (limited to 'django')
| -rw-r--r-- | django/template/loaders/app_directories.py | 35 | ||||
| -rw-r--r-- | django/template/loaders/filesystem.py | 15 |
2 files changed, 10 insertions, 40 deletions
diff --git a/django/template/loaders/app_directories.py b/django/template/loaders/app_directories.py index 17e2183bfc..c9a8adf49c 100644 --- a/django/template/loaders/app_directories.py +++ b/django/template/loaders/app_directories.py @@ -3,39 +3,12 @@ Wrapper for loading templates from "templates" directories in INSTALLED_APPS packages. """ -import io - -from django.core.exceptions import SuspiciousFileOperation -from django.template.base import TemplateDoesNotExist from django.template.utils import get_app_template_dirs -from django.utils._os import safe_join - -from .base import Loader as BaseLoader +from .filesystem import Loader as FilesystemLoader -class Loader(BaseLoader): - def get_template_sources(self, template_name, template_dirs=None): - """ - Returns the absolute paths to "template_name", when appended to each - directory in "template_dirs". Any paths that don't lie inside one of the - template dirs are excluded from the result set, for security reasons. - """ - if not template_dirs: - template_dirs = get_app_template_dirs('templates') - for template_dir in template_dirs: - try: - yield safe_join(template_dir, template_name) - except SuspiciousFileOperation: - # The joined path was located outside of this template_dir - # (it might be inside another one, so this isn't fatal). - pass +class Loader(FilesystemLoader): - def load_template_source(self, template_name, template_dirs=None): - for filepath in self.get_template_sources(template_name, template_dirs): - try: - with io.open(filepath, encoding=self.engine.file_charset) as fp: - return fp.read(), filepath - except IOError: - pass - raise TemplateDoesNotExist(template_name) + def get_dirs(self): + return get_app_template_dirs('templates') diff --git a/django/template/loaders/filesystem.py b/django/template/loaders/filesystem.py index 4ca19d2b02..cb61d576ed 100644 --- a/django/template/loaders/filesystem.py +++ b/django/template/loaders/filesystem.py @@ -13,6 +13,9 @@ from .base import Loader as BaseLoader class Loader(BaseLoader): + def get_dirs(self): + return self.engine.dirs + def get_template_sources(self, template_name, template_dirs=None): """ Returns the absolute paths to "template_name", when appended to each @@ -20,7 +23,7 @@ class Loader(BaseLoader): template dirs are excluded from the result set, for security reasons. """ if not template_dirs: - template_dirs = self.engine.dirs + template_dirs = self.get_dirs() for template_dir in template_dirs: try: yield safe_join(template_dir, template_name) @@ -30,16 +33,10 @@ class Loader(BaseLoader): pass def load_template_source(self, template_name, template_dirs=None): - tried = [] for filepath in self.get_template_sources(template_name, template_dirs): try: with io.open(filepath, encoding=self.engine.file_charset) as fp: return fp.read(), filepath except IOError: - tried.append(filepath) - if tried: - error_msg = "Tried %s" % tried - else: - error_msg = ("Your template directories configuration is empty. " - "Change it to point to at least one template directory.") - raise TemplateDoesNotExist(error_msg) + pass + raise TemplateDoesNotExist(template_name) |
