mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +00:00
Removed a bunch of DOS line endings. Somehow I didn't convert this correctly in
[6580]. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6598 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
2c22f08657
commit
17301f2fa0
@ -1,57 +1,57 @@
|
|||||||
from django.template import Library, Node, TemplateSyntaxError
|
from django.template import Library, Node, TemplateSyntaxError
|
||||||
from django.template import resolve_variable
|
from django.template import resolve_variable
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.utils.encoding import force_unicode
|
from django.utils.encoding import force_unicode
|
||||||
|
|
||||||
register = Library()
|
register = Library()
|
||||||
|
|
||||||
class CacheNode(Node):
|
class CacheNode(Node):
|
||||||
def __init__(self, nodelist, expire_time, fragment_name, vary_on):
|
def __init__(self, nodelist, expire_time, fragment_name, vary_on):
|
||||||
self.nodelist = nodelist
|
self.nodelist = nodelist
|
||||||
self.expire_time = expire_time
|
self.expire_time = expire_time
|
||||||
self.fragment_name = fragment_name
|
self.fragment_name = fragment_name
|
||||||
self.vary_on = vary_on
|
self.vary_on = vary_on
|
||||||
|
|
||||||
def render(self, context):
|
def render(self, context):
|
||||||
# Build a unicode key for this fragment and all vary-on's.
|
# Build a unicode key for this fragment and all vary-on's.
|
||||||
cache_key = u':'.join([self.fragment_name] + \
|
cache_key = u':'.join([self.fragment_name] + \
|
||||||
[force_unicode(resolve_variable(var, context)) for var in self.vary_on])
|
[force_unicode(resolve_variable(var, context)) for var in self.vary_on])
|
||||||
value = cache.get(cache_key)
|
value = cache.get(cache_key)
|
||||||
if value is None:
|
if value is None:
|
||||||
value = self.nodelist.render(context)
|
value = self.nodelist.render(context)
|
||||||
cache.set(cache_key, value, self.expire_time)
|
cache.set(cache_key, value, self.expire_time)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def do_cache(parser, token):
|
def do_cache(parser, token):
|
||||||
"""
|
"""
|
||||||
This will cache the contents of a template fragment for a given amount
|
This will cache the contents of a template fragment for a given amount
|
||||||
of time.
|
of time.
|
||||||
|
|
||||||
Usage::
|
Usage::
|
||||||
|
|
||||||
{% load cache %}
|
{% load cache %}
|
||||||
{% cache [expire_time] [fragment_name] %}
|
{% cache [expire_time] [fragment_name] %}
|
||||||
.. some expensive processing ..
|
.. some expensive processing ..
|
||||||
{% endcache %}
|
{% endcache %}
|
||||||
|
|
||||||
This tag also supports varying by a list of arguments::
|
This tag also supports varying by a list of arguments::
|
||||||
|
|
||||||
{% load cache %}
|
{% load cache %}
|
||||||
{% cache [expire_time] [fragment_name] [var1] [var2] .. %}
|
{% cache [expire_time] [fragment_name] [var1] [var2] .. %}
|
||||||
.. some expensive processing ..
|
.. some expensive processing ..
|
||||||
{% endcache %}
|
{% endcache %}
|
||||||
|
|
||||||
Each unique set of arguments will result in a unique cache entry.
|
Each unique set of arguments will result in a unique cache entry.
|
||||||
"""
|
"""
|
||||||
nodelist = parser.parse(('endcache',))
|
nodelist = parser.parse(('endcache',))
|
||||||
parser.delete_first_token()
|
parser.delete_first_token()
|
||||||
tokens = token.contents.split()
|
tokens = token.contents.split()
|
||||||
if len(tokens) < 3:
|
if len(tokens) < 3:
|
||||||
raise TemplateSyntaxError(u"'%r' tag requires at least 2 arguments." % tokens[0])
|
raise TemplateSyntaxError(u"'%r' tag requires at least 2 arguments." % tokens[0])
|
||||||
try:
|
try:
|
||||||
expire_time = int(tokens[1])
|
expire_time = int(tokens[1])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise TemplateSyntaxError(u"First argument to '%r' must be an integer (got '%s')." % (tokens[0], tokens[1]))
|
raise TemplateSyntaxError(u"First argument to '%r' must be an integer (got '%s')." % (tokens[0], tokens[1]))
|
||||||
return CacheNode(nodelist, expire_time, tokens[2], tokens[3:])
|
return CacheNode(nodelist, expire_time, tokens[2], tokens[3:])
|
||||||
|
|
||||||
register.tag('cache', do_cache)
|
register.tag('cache', do_cache)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user