summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
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)