Changeset 7754 for django/trunk/django/templatetags
- Timestamp:
- 06/25/08 23:54:10 (7 months ago)
- Files:
-
- django/trunk/django/templatetags/cache.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/templatetags/cache.py
r7294 r7754 1 from django.template import Library, Node, TemplateSyntaxError 1 from django.template import Library, Node, TemplateSyntaxError, Variable, VariableDoesNotExist 2 2 from django.template import resolve_variable 3 3 from django.core.cache import cache … … 7 7 8 8 class CacheNode(Node): 9 def __init__(self, nodelist, expire_time , fragment_name, vary_on):9 def __init__(self, nodelist, expire_time_var, fragment_name, vary_on): 10 10 self.nodelist = nodelist 11 self.expire_time = expire_time11 self.expire_time_var = Variable(expire_time_var) 12 12 self.fragment_name = fragment_name 13 13 self.vary_on = vary_on 14 14 15 15 def render(self, context): 16 try: 17 expire_time = self.expire_time_var.resolve(context) 18 except VariableDoesNotExist: 19 raise TemplateSyntaxError('"cache" tag got an unknkown variable: %r' % self.expire_time_var.var) 20 try: 21 expire_time = int(expire_time) 22 except (ValueError, TypeError): 23 raise TemplateSyntaxError('"cache" tag got a non-integer timeout value: %r' % expire_time) 16 24 # Build a unicode key for this fragment and all vary-on's. 17 cache_key = u':'.join([self.fragment_name] + \ 18 [force_unicode(resolve_variable(var, context)) for var in self.vary_on]) 25 cache_key = u':'.join([self.fragment_name] + [force_unicode(resolve_variable(var, context)) for var in self.vary_on]) 19 26 value = cache.get(cache_key) 20 27 if value is None: 21 28 value = self.nodelist.render(context) 22 cache.set(cache_key, value, self.expire_time)29 cache.set(cache_key, value, expire_time) 23 30 return value 24 31 … … 49 56 if len(tokens) < 3: 50 57 raise TemplateSyntaxError(u"'%r' tag requires at least 2 arguments." % tokens[0]) 51 try: 52 expire_time = int(tokens[1]) 53 except ValueError: 54 raise TemplateSyntaxError(u"First argument to '%r' must be an integer (got '%s')." % (tokens[0], tokens[1])) 55 return CacheNode(nodelist, expire_time, tokens[2], tokens[3:]) 58 return CacheNode(nodelist, tokens[1], tokens[2], tokens[3:]) 56 59 57 60 register.tag('cache', do_cache)
