Commit 484f3edf authored by Susan Tan's avatar Susan Tan Committed by Tim Graham
Browse files

Fixed #18400 -- Modified length template filter to return 0 for unknown variables.

Thanks Florian for the bug report, luyikei for the initial code patch, and
Bouke for the code review feedback.
parent 84cafc2b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -578,7 +578,7 @@ def length(value):
    try:
        return len(value)
    except (ValueError, TypeError):
        return ''
        return 0


@register.filter(is_safe=False)
+5 −0
Original line number Diff line number Diff line
@@ -1688,6 +1688,11 @@ For example::
If ``value`` is ``['a', 'b', 'c', 'd']`` or ``"abcd"``, the output will be
``4``.

.. versionchanged:: 1.8

    The filter returns ``0`` for an undefined variable. Previously, it returned
    an empty string.

.. templatefilter:: length_is

length_is
+3 −0
Original line number Diff line number Diff line
@@ -267,6 +267,9 @@ Miscellaneous

* ``django.contrib.gis`` dropped support for GEOS 3.1 and GDAL 1.6.

* The :tfilter:`length` template filter now returns ``0`` for an undefined
  variable, rather than an empty string.

.. _deprecated-features-1.8:

Features deprecated in 1.8
+2 −2
Original line number Diff line number Diff line
@@ -322,8 +322,8 @@ def get_filter_tests():
        'length04': ('{{ string|length }}', {'string': 'django'}, '6'),
        'length05': ('{% if string|length == 6 %}Pass{% endif %}', {'string': mark_safe('django')}, 'Pass'),
        # Invalid uses that should fail silently.
        'length06': ('{{ int|length }}', {'int': 7}, ''),
        'length07': ('{{ None|length }}', {'None': None}, ''),
        'length06': ('{{ int|length }}', {'int': 7}, '0'),
        'length07': ('{{ None|length }}', {'None': None}, '0'),

        # length_is filter.
        'length_is01': ('{% if some_list|length_is:"4" %}Four{% endif %}', {'some_list': ['4', None, True, {}]}, 'Four'),