web/lib/django/template/loader.py
author ymh <ymh.work@gmail.com>
Tue, 15 Mar 2011 10:34:41 +0100
changeset 65 3d18d15135f1
parent 38 77b6da96e6f1
permissions -rw-r--r--
put video url in segment object
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# Wrapper for loading templates from storage of some sort (e.g. filesystem, database).
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
# This uses the TEMPLATE_LOADERS setting, which is a list of loaders to use.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
# Each loader is expected to have this interface:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
#    callable(name, dirs=[])
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
# name is the template name.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
# dirs is an optional list of directories to search instead of TEMPLATE_DIRS.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
# The loader should return a tuple of (template_source, path). The path returned
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
# might be shown to the user for debugging purposes, so it should identify where
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
# the template was loaded from.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
# A loader may return an already-compiled template instead of the actual
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
# template source. In that case the path returned should be None, since the
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
# path information is associated with the template during the compilation,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
# which has already been done.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
# Each loader should have an "is_usable" attribute set. This is a boolean that
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
# specifies whether the loader can be used in this Python installation. Each
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
# loader is responsible for setting this when it's initialized.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
#
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
# For example, the eggs loader (which is capable of loading templates from
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
# Python eggs) sets is_usable to False if the "pkg_resources" module isn't
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
# installed, because pkg_resources is necessary to read eggs.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
from django.core.exceptions import ImproperlyConfigured
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
from django.template import Origin, Template, Context, TemplateDoesNotExist, add_to_builtins
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
from django.utils.importlib import import_module
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
from django.conf import settings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
template_source_loaders = None
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
class BaseLoader(object):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    is_usable = False
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    def __init__(self, *args, **kwargs):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        pass
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    def __call__(self, template_name, template_dirs=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        return self.load_template(template_name, template_dirs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    def load_template(self, template_name, template_dirs=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        source, display_name = self.load_template_source(template_name, template_dirs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        origin = make_origin(display_name, self.load_template_source, template_name, template_dirs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        try:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
            template = get_template_from_string(source, origin, template_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
            return template, None
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        except TemplateDoesNotExist:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
            # If compiling the template we found raises TemplateDoesNotExist, back off to
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            # returning the source and display name for the template we were asked to load.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
            # This allows for correct identification (later) of the actual template that does
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
            # not exist.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
            return source, display_name
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    def load_template_source(self, template_name, template_dirs=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
        Returns a tuple containing the source and origin for the given template
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        name.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        raise NotImplementedError
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    def reset(self):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        Resets any state maintained by the loader instance (e.g., cached
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        templates or cached loader modules).
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        pass
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
class LoaderOrigin(Origin):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    def __init__(self, display_name, loader, name, dirs):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        super(LoaderOrigin, self).__init__(display_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        self.loader, self.loadname, self.dirs = loader, name, dirs
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    def reload(self):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        return self.loader(self.loadname, self.dirs)[0]
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
def make_origin(display_name, loader, name, dirs):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
    if settings.TEMPLATE_DEBUG and display_name:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        return LoaderOrigin(display_name, loader, name, dirs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
        return None
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
def find_template_loader(loader):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    if isinstance(loader, (tuple, list)):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        loader, args = loader[0], loader[1:]
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        args = []
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    if isinstance(loader, basestring):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        module, attr = loader.rsplit('.', 1)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        try:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
            mod = import_module(module)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        except ImportError, e:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
            raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
        try:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
            TemplateLoader = getattr(mod, attr)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        except AttributeError, e:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
            raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        if hasattr(TemplateLoader, 'load_template_source'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
            func = TemplateLoader(*args)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
            # Try loading module the old way - string is full path to callable
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
            if args:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
                raise ImproperlyConfigured("Error importing template source loader %s - can't pass arguments to function-based loader." % loader)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
            func = TemplateLoader
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        if not func.is_usable:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
            import warnings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
            warnings.warn("Your TEMPLATE_LOADERS setting includes %r, but your Python installation doesn't support that type of template loading. Consider removing that line from TEMPLATE_LOADERS." % loader)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            return None
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
            return func
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
        raise ImproperlyConfigured('Loader does not define a "load_template" callable template source loader')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
def find_template(name, dirs=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    # Calculate template_source_loaders the first time the function is executed
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    # because putting this logic in the module-level namespace may cause
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
    # circular import errors. See Django ticket #1292.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    global template_source_loaders
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    if template_source_loaders is None:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        loaders = []
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
        for loader_name in settings.TEMPLATE_LOADERS:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
            loader = find_template_loader(loader_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
            if loader is not None:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                loaders.append(loader)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        template_source_loaders = tuple(loaders)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    for loader in template_source_loaders:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
        try:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
            source, display_name = loader(name, dirs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
            return (source, make_origin(display_name, loader, name, dirs))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        except TemplateDoesNotExist:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
            pass
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    raise TemplateDoesNotExist(name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
def find_template_source(name, dirs=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
    # For backward compatibility
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    import warnings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    warnings.warn(
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        "`django.template.loaders.find_template_source` is deprecated; use `django.template.loaders.find_template` instead.",
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        PendingDeprecationWarning
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    )
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    template, origin = find_template(name, dirs)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
    if hasattr(template, 'render'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
        raise Exception("Found a compiled template that is incompatible with the deprecated `django.template.loaders.find_template_source` function.")
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    return template, origin
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
def get_template(template_name):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    Returns a compiled Template object for the given template name,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
    handling template inheritance recursively.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
    template, origin = find_template(template_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
    if not hasattr(template, 'render'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
        # template needs to be compiled
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        template = get_template_from_string(template, origin, template_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
    return template
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
def get_template_from_string(source, origin=None, name=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    Returns a compiled Template object for the given template code,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    handling template inheritance recursively.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    return Template(source, origin, name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
def render_to_string(template_name, dictionary=None, context_instance=None):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    Loads the given template_name and renders it with the given dictionary as
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
    context. The template_name may be a string to load a single template using
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
    get_template, or it may be a tuple to use select_template to find one of
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
    the templates in the list. Returns a string.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
    """
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
    dictionary = dictionary or {}
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    if isinstance(template_name, (list, tuple)):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
        t = select_template(template_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        t = get_template(template_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
    if context_instance:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
        context_instance.update(dictionary)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
        context_instance = Context(dictionary)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    return t.render(context_instance)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
def select_template(template_name_list):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    "Given a list of template names, returns the first that can be loaded."
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    for template_name in template_name_list:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
        try:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
            return get_template(template_name)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        except TemplateDoesNotExist:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
            continue
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
    # If we get here, none of the templates could be loaded
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    raise TemplateDoesNotExist(', '.join(template_name_list))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
add_to_builtins('django.template.loader_tags')