Ticket #582: template_eggs-3.patch

File template_eggs-3.patch, 3.1 KB (added by sune.kirkeby@…, 10 years ago)
  • django/core/template_eggs.py

     
     1"""Wrapper for loading templates from eggs via pkg_resources.resource_string."""
     2
     3try:
     4    from pkg_resources import resource_string
     5except ImportError:
     6    # python2.3 compatibility hack
     7    def resource_string(*args):
     8        raise AssertionError, 'pkg_resource required for template_eggs'
     9
     10from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION
     11from django.core.template import TemplateDoesNotExist
     12
     13def load_template_source(name, dirs=None):
     14    """I load templates from Python eggs via pkg_resource.resource_string.
     15
     16    For every install app I try to get the resource (app, name)."""
     17
     18    pkg_name = 'templates/' + name + TEMPLATE_FILE_EXTENSION
     19
     20    for app in INSTALLED_APPS:
     21        try:
     22            return resource_string(app, pkg_name)
     23        except:
     24            pass
     25
     26    raise TemplateDoesNotExist, name
  • django/core/template_loader.py

     
    11"Wrapper for loading templates from storage of some sort (e.g. files or db)"
    22import template
    3 from template_file import load_template_source
    43
     4from django.conf.settings import TEMPLATE_SOURCE_LOADERS
     5from django.core import exceptions
     6
     7template_source_loaders = []
     8for path in TEMPLATE_SOURCE_LOADERS:
     9    module, attr = path.rsplit('.', 1)
     10    try:
     11        mod = __import__(module, globals(), locals(), [attr])
     12    except ImportError, e:
     13        raise exceptions.ImproperlyConfigured, 'Error importing template_source_loader %s: "%s"' % (module, e)
     14    try:
     15        template_source_loaders.append(getattr(mod, attr))
     16    except AttributeError:
     17        raise exceptions.ImproperlyConfigured, 'Module "%s" does not define a "%s" callable template_source_loader' % (module, attr)
     18
     19def load_template_source(name, dirs=None):
     20    for loader in template_source_loaders:
     21        try:
     22            return loader(name, dirs)
     23        except template.TemplateDoesNotExist:
     24            pass
     25    raise template.TemplateDoesNotExist, name
     26
    527class ExtendsError(Exception):
    628    pass
    729
  • django/conf/global_settings.py

     
    5858# Extension on all templates.
    5959TEMPLATE_FILE_EXTENSION = '.html'
    6060
     61# Callables which know how to import template sources from various
     62# sources; the expected interface is callable(name, [dirs]), where dirs
     63# is a list of directories to search instead of TEMPLATE_DIRS.
     64TEMPLATE_SOURCE_LOADERS = (
     65    'django.core.template_file.load_template_source',
     66    'django.core.template_eggs.load_template_source',
     67)
     68
    6169# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
    6270# trailing slash.
    6371# Examples: "http://foo.com/media/", "/media/".
Back to Top