summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2014-03-22 16:33:37 +0100
committerClaude Paroz <claude@2xlibre.net>2014-03-22 16:39:46 +0100
commitbc315266c86f371ab04d05c43383775267e8595a (patch)
tree418996f961b6c4600ebe4cac60707f7184fdfc56
parent6a0291bdaf43e5467a524dcc67f85b55f36fe46f (diff)
Fixed #22294 -- Prevented converting length filter output to string
Thanks Steve Pike for the report.
-rw-r--r--django/template/defaultfilters.py2
-rw-r--r--docs/ref/templates/builtins.txt6
-rw-r--r--tests/defaultfilters/tests.py3
-rw-r--r--tests/template_tests/filters.py5
4 files changed, 10 insertions, 6 deletions
diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
index f55aa072b7..be192d0ebf 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -572,7 +572,7 @@ def last(value):
return ''
-@register.filter(is_safe=True)
+@register.filter(is_safe=False)
def length(value):
"""Returns the length of the value - useful for lists."""
try:
diff --git a/docs/ref/templates/builtins.txt b/docs/ref/templates/builtins.txt
index 34dd42252a..b5734f234f 100644
--- a/docs/ref/templates/builtins.txt
+++ b/docs/ref/templates/builtins.txt
@@ -1680,7 +1680,8 @@ For example::
{{ value|length }}
-If ``value`` is ``['a', 'b', 'c', 'd']``, the output will be ``4``.
+If ``value`` is ``['a', 'b', 'c', 'd']`` or ``"abcd"``, the output will be
+``4``.
.. templatefilter:: length_is
@@ -1693,7 +1694,8 @@ For example::
{{ value|length_is:"4" }}
-If ``value`` is ``['a', 'b', 'c', 'd']``, the output will be ``True``.
+If ``value`` is ``['a', 'b', 'c', 'd']`` or ``"abcd"``, the output will be
+``True``.
.. templatefilter:: linebreaks
diff --git a/tests/defaultfilters/tests.py b/tests/defaultfilters/tests.py
index 966e86bbaa..9a794bd9e7 100644
--- a/tests/defaultfilters/tests.py
+++ b/tests/defaultfilters/tests.py
@@ -20,7 +20,7 @@ from django.test import TestCase
from django.utils import six
from django.utils import translation
from django.utils.encoding import python_2_unicode_compatible
-from django.utils.safestring import SafeData
+from django.utils.safestring import mark_safe, SafeData
class DefaultFiltersTests(TestCase):
@@ -495,6 +495,7 @@ class DefaultFiltersTests(TestCase):
def test_length(self):
self.assertEqual(length('1234'), 4)
+ self.assertEqual(length(mark_safe('1234')), 4)
self.assertEqual(length([1, 2, 3, 4]), 4)
self.assertEqual(length_is([], 0), True)
self.assertEqual(length_is([], 1), False)
diff --git a/tests/template_tests/filters.py b/tests/template_tests/filters.py
index 371d0325b6..9fa6918f92 100644
--- a/tests/template_tests/filters.py
+++ b/tests/template_tests/filters.py
@@ -320,9 +320,10 @@ def get_filter_tests():
'length02': ('{{ list|length }}', {'list': []}, '0'),
'length03': ('{{ string|length }}', {'string': ''}, '0'),
'length04': ('{{ string|length }}', {'string': 'django'}, '6'),
+ 'length05': ('{% if string|length == 6 %}Pass{% endif %}', {'string': mark_safe('django')}, 'Pass'),
# Invalid uses that should fail silently.
- 'length05': ('{{ int|length }}', {'int': 7}, ''),
- 'length06': ('{{ None|length }}', {'None': None}, ''),
+ 'length06': ('{{ int|length }}', {'int': 7}, ''),
+ 'length07': ('{{ None|length }}', {'None': None}, ''),
# length_is filter.
'length_is01': ('{% if some_list|length_is:"4" %}Four{% endif %}', {'some_list': ['4', None, True, {}]}, 'Four'),