diff options
| author | Tomek Paczkowski <tomek@hauru.eu> | 2013-02-24 12:58:02 +0100 |
|---|---|---|
| committer | Honza Kral <honza.kral@gmail.com> | 2013-02-24 14:32:45 +0100 |
| commit | 99edbe0e279166db82caaf545ef92d5446a6a07e (patch) | |
| tree | 495785ea6bca5f1c94881d624b622b1d6ea93b30 /django | |
| parent | b9cc61021a0db1e5b41e61d3e53180e4fc618f9c (diff) | |
Fixed #19253 -- Extracted template cache key building logic
Introduced a public function
django.core.cache.utils.make_template_fragment_key
Thanks @chrismedrela for fruitful cooperation.
Diffstat (limited to 'django')
| -rw-r--r-- | django/core/cache/utils.py | 15 | ||||
| -rw-r--r-- | django/templatetags/cache.py | 10 |
2 files changed, 18 insertions, 7 deletions
diff --git a/django/core/cache/utils.py b/django/core/cache/utils.py new file mode 100644 index 0000000000..4310825ad4 --- /dev/null +++ b/django/core/cache/utils.py @@ -0,0 +1,15 @@ +from __future__ import absolute_import, unicode_literals + +import hashlib +from django.utils.encoding import force_bytes +from django.utils.http import urlquote + +TEMPLATE_FRAGMENT_KEY_TEMPLATE = 'template.cache.%s.%s' + + +def make_template_fragment_key(fragment_name, vary_on=None): + if vary_on is None: + vary_on = () + key = ':'.join([urlquote(var) for var in vary_on]) + args = hashlib.md5(force_bytes(key)) + return TEMPLATE_FRAGMENT_KEY_TEMPLATE % (fragment_name, args.hexdigest()) diff --git a/django/templatetags/cache.py b/django/templatetags/cache.py index bb21b91c6a..8c061ca4c6 100644 --- a/django/templatetags/cache.py +++ b/django/templatetags/cache.py @@ -1,10 +1,8 @@ from __future__ import unicode_literals -import hashlib +from django.core.cache.utils import make_template_fragment_key from django.template import Library, Node, TemplateSyntaxError, VariableDoesNotExist from django.core.cache import cache -from django.utils.encoding import force_bytes -from django.utils.http import urlquote register = Library() @@ -24,10 +22,8 @@ class CacheNode(Node): expire_time = int(expire_time) except (ValueError, TypeError): raise TemplateSyntaxError('"cache" tag got a non-integer timeout value: %r' % expire_time) - # Build a key for this fragment and all vary-on's. - key = ':'.join([urlquote(var.resolve(context)) for var in self.vary_on]) - args = hashlib.md5(force_bytes(key)) - cache_key = 'template.cache.%s.%s' % (self.fragment_name, args.hexdigest()) + vary_on = [var.resolve(context) for var in self.vary_on] + cache_key = make_template_fragment_key(self.fragment_name, vary_on) value = cache.get(cache_key) if value is None: value = self.nodelist.render(context) |
