Fixed #27882 -- Allowed {% cache %} to cache indefinitely.
This commit is contained in:
parent
44f9241c48
commit
7a7b331cd5
|
@ -20,10 +20,11 @@ class CacheNode(Node):
|
|||
expire_time = self.expire_time_var.resolve(context)
|
||||
except VariableDoesNotExist:
|
||||
raise TemplateSyntaxError('"cache" tag got an unknown variable: %r' % self.expire_time_var.var)
|
||||
try:
|
||||
expire_time = int(expire_time)
|
||||
except (ValueError, TypeError):
|
||||
raise TemplateSyntaxError('"cache" tag got a non-integer timeout value: %r' % expire_time)
|
||||
if expire_time is not None:
|
||||
try:
|
||||
expire_time = int(expire_time)
|
||||
except (ValueError, TypeError):
|
||||
raise TemplateSyntaxError('"cache" tag got a non-integer timeout value: %r' % expire_time)
|
||||
if self.cache_name:
|
||||
try:
|
||||
cache_name = self.cache_name.resolve(context)
|
||||
|
|
|
@ -659,8 +659,9 @@ the ``cache`` template tag. To give your template access to this tag, put
|
|||
|
||||
The ``{% cache %}`` template tag caches the contents of the block for a given
|
||||
amount of time. It takes at least two arguments: the cache timeout, in seconds,
|
||||
and the name to give the cache fragment. The name will be taken as is, do not
|
||||
use a variable. For example:
|
||||
and the name to give the cache fragment. The fragment is cached forever if
|
||||
timeout is ``None``. The name will be taken as is, do not use a variable. For
|
||||
example:
|
||||
|
||||
.. code-block:: html+django
|
||||
|
||||
|
@ -669,6 +670,10 @@ use a variable. For example:
|
|||
.. sidebar ..
|
||||
{% endcache %}
|
||||
|
||||
.. versionchanged:: 2.0
|
||||
|
||||
Older versions don't allow a ``None`` timeout.
|
||||
|
||||
Sometimes you might want to cache multiple copies of a fragment depending on
|
||||
some dynamic data that appears inside the fragment. For example, you might want a
|
||||
separate cached copy of the sidebar used in the previous example for every user
|
||||
|
|
|
@ -122,6 +122,17 @@ class CacheTagTests(SimpleTestCase):
|
|||
output = self.engine.render_to_string('cache18')
|
||||
self.assertEqual(output, 'cache18')
|
||||
|
||||
@setup({
|
||||
'first': '{% load cache %}{% cache None fragment19 %}content{% endcache %}',
|
||||
'second': '{% load cache %}{% cache None fragment19 %}not rendered{% endcache %}'
|
||||
})
|
||||
def test_none_timeout(self):
|
||||
"""A timeout of None means "cache forever"."""
|
||||
output = self.engine.render_to_string('first')
|
||||
self.assertEqual(output, 'content')
|
||||
output = self.engine.render_to_string('second')
|
||||
self.assertEqual(output, 'content')
|
||||
|
||||
|
||||
class CacheTests(SimpleTestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue