summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorTomek Paczkowski <tomek@hauru.eu>2013-02-24 12:58:02 +0100
committerHonza Kral <honza.kral@gmail.com>2013-02-24 14:32:45 +0100
commit99edbe0e279166db82caaf545ef92d5446a6a07e (patch)
tree495785ea6bca5f1c94881d624b622b1d6ea93b30 /django
parentb9cc61021a0db1e5b41e61d3e53180e4fc618f9c (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.py15
-rw-r--r--django/templatetags/cache.py10
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)