web/lib/django/template/loaders/filesystem.py
changeset 38 77b6da96e6f1
equal deleted inserted replaced
37:8d941af65caf 38:77b6da96e6f1
       
     1 """
       
     2 Wrapper for loading templates from the filesystem.
       
     3 """
       
     4 
       
     5 from django.conf import settings
       
     6 from django.template import TemplateDoesNotExist
       
     7 from django.template.loader import BaseLoader
       
     8 from django.utils._os import safe_join
       
     9 
       
    10 class Loader(BaseLoader):
       
    11     is_usable = True
       
    12 
       
    13     def get_template_sources(self, template_name, template_dirs=None):
       
    14         """
       
    15         Returns the absolute paths to "template_name", when appended to each
       
    16         directory in "template_dirs". Any paths that don't lie inside one of the
       
    17         template dirs are excluded from the result set, for security reasons.
       
    18         """
       
    19         if not template_dirs:
       
    20             template_dirs = settings.TEMPLATE_DIRS
       
    21         for template_dir in template_dirs:
       
    22             try:
       
    23                 yield safe_join(template_dir, template_name)
       
    24             except UnicodeDecodeError:
       
    25                 # The template dir name was a bytestring that wasn't valid UTF-8.
       
    26                 raise
       
    27             except ValueError:
       
    28                 # The joined path was located outside of this particular
       
    29                 # template_dir (it might be inside another one, so this isn't
       
    30                 # fatal).
       
    31                 pass
       
    32 
       
    33     def load_template_source(self, template_name, template_dirs=None):
       
    34         tried = []
       
    35         for filepath in self.get_template_sources(template_name, template_dirs):
       
    36             try:
       
    37                 file = open(filepath)
       
    38                 try:
       
    39                     return (file.read().decode(settings.FILE_CHARSET), filepath)
       
    40                 finally:
       
    41                     file.close()
       
    42             except IOError:
       
    43                 tried.append(filepath)
       
    44         if tried:
       
    45             error_msg = "Tried %s" % tried
       
    46         else:
       
    47             error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."
       
    48         raise TemplateDoesNotExist(error_msg)
       
    49     load_template_source.is_usable = True
       
    50 
       
    51 _loader = Loader()
       
    52 
       
    53 def load_template_source(template_name, template_dirs=None):
       
    54     # For backwards compatibility
       
    55     import warnings
       
    56     warnings.warn(
       
    57         "'django.template.loaders.filesystem.load_template_source' is deprecated; use 'django.template.loaders.filesystem.Loader' instead.",
       
    58         PendingDeprecationWarning
       
    59     )
       
    60     return _loader.load_template_source(template_name, template_dirs)
       
    61 load_template_source.is_usable = True