web/lib/django/template/loaders/filesystem.py
changeset 0 0d40e90630ef
child 29 cc9b7e14412b
equal deleted inserted replaced
-1:000000000000 0:0d40e90630ef
       
     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.utils._os import safe_join
       
     8 
       
     9 def get_template_sources(template_name, template_dirs=None):
       
    10     """
       
    11     Returns the absolute paths to "template_name", when appended to each
       
    12     directory in "template_dirs". Any paths that don't lie inside one of the
       
    13     template dirs are excluded from the result set, for security reasons.
       
    14     """
       
    15     if not template_dirs:
       
    16         template_dirs = settings.TEMPLATE_DIRS
       
    17     for template_dir in template_dirs:
       
    18         try:
       
    19             yield safe_join(template_dir, template_name)
       
    20         except UnicodeDecodeError:
       
    21             # The template dir name was a bytestring that wasn't valid UTF-8.
       
    22             raise
       
    23         except ValueError:
       
    24             # The joined path was located outside of this particular
       
    25             # template_dir (it might be inside another one, so this isn't
       
    26             # fatal).
       
    27             pass
       
    28 
       
    29 def load_template_source(template_name, template_dirs=None):
       
    30     tried = []
       
    31     for filepath in get_template_sources(template_name, template_dirs):
       
    32         try:
       
    33             return (open(filepath).read().decode(settings.FILE_CHARSET), filepath)
       
    34         except IOError:
       
    35             tried.append(filepath)
       
    36     if tried:
       
    37         error_msg = "Tried %s" % tried
       
    38     else:
       
    39         error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."
       
    40     raise TemplateDoesNotExist, error_msg
       
    41 load_template_source.is_usable = True