Refs #13573 -- Modified the key technique added in r13295 to be more robust against potential key collisions while keeping key names human-readable. Thanks to Alex for being finicky.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13299 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2010-05-21 14:25:26 +00:00
parent 5acd9cd8ba
commit 84060a1f7a
1 changed files with 6 additions and 3 deletions

View File

@ -3,10 +3,11 @@ Wrapper class that takes a list of template loaders as an argument and attempts
to load templates from them in order, caching the result. to load templates from them in order, caching the result.
""" """
from django.core.exceptions import ImproperlyConfigured
from django.template import TemplateDoesNotExist from django.template import TemplateDoesNotExist
from django.template.loader import BaseLoader, get_template_from_string, find_template_loader, make_origin from django.template.loader import BaseLoader, get_template_from_string, find_template_loader, make_origin
from django.utils.hashcompat import sha_constructor
from django.utils.importlib import import_module from django.utils.importlib import import_module
from django.core.exceptions import ImproperlyConfigured
class Loader(BaseLoader): class Loader(BaseLoader):
is_usable = True is_usable = True
@ -34,8 +35,10 @@ class Loader(BaseLoader):
raise TemplateDoesNotExist(name) raise TemplateDoesNotExist(name)
def load_template(self, template_name, template_dirs=None): def load_template(self, template_name, template_dirs=None):
# Use hash(..) to avoid saving potentially large template_dirs values key = template_name
key = hash((template_name, template_dirs)) if template_dirs:
# If template directories were specified, use a hash to differentiate
key = '-'.join([template_name, sha_constructor('|'.join(template_dirs)).hexdigest()])
if key not in self.template_cache: if key not in self.template_cache:
template, origin = self.find_template(template_name, template_dirs) template, origin = self.find_template(template_name, template_dirs)