Fixed #33864 -- Deprecated length_is template filter.
This commit is contained in:
parent
2fac0a1808
commit
4d4bf55e0e
|
@ -4,11 +4,11 @@
|
||||||
<div class="description">{{ fieldset.description|safe }}</div>
|
<div class="description">{{ fieldset.description|safe }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for line in fieldset %}
|
{% for line in fieldset %}
|
||||||
<div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
|
<div class="form-row{% if line.fields|length == 1 and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
|
||||||
{% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
|
{% if line.fields|length == 1 %}{{ line.errors }}{% endif %}
|
||||||
{% for field in line %}
|
{% for field in line %}
|
||||||
<div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
|
<div{% if not line.fields|length == 1 %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
|
||||||
{% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
|
{% if not line.fields|length == 1 and not field.is_readonly %}{{ field.errors }}{% endif %}
|
||||||
{% if field.is_checkbox %}
|
{% if field.is_checkbox %}
|
||||||
{{ field.field }}{{ field.label_tag }}
|
{{ field.field }}{{ field.label_tag }}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import random as random_module
|
import random as random_module
|
||||||
import re
|
import re
|
||||||
import types
|
import types
|
||||||
|
import warnings
|
||||||
from decimal import ROUND_HALF_UP, Context, Decimal, InvalidOperation
|
from decimal import ROUND_HALF_UP, Context, Decimal, InvalidOperation
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from inspect import unwrap
|
from inspect import unwrap
|
||||||
|
@ -11,6 +12,7 @@ from urllib.parse import quote
|
||||||
|
|
||||||
from django.utils import formats
|
from django.utils import formats
|
||||||
from django.utils.dateformat import format, time_format
|
from django.utils.dateformat import format, time_format
|
||||||
|
from django.utils.deprecation import RemovedInDjango51Warning
|
||||||
from django.utils.encoding import iri_to_uri
|
from django.utils.encoding import iri_to_uri
|
||||||
from django.utils.html import avoid_wrapping, conditional_escape, escape, escapejs
|
from django.utils.html import avoid_wrapping, conditional_escape, escape, escapejs
|
||||||
from django.utils.html import json_script as _json_script
|
from django.utils.html import json_script as _json_script
|
||||||
|
@ -611,6 +613,11 @@ def length(value):
|
||||||
@register.filter(is_safe=False)
|
@register.filter(is_safe=False)
|
||||||
def length_is(value, arg):
|
def length_is(value, arg):
|
||||||
"""Return a boolean of whether the value's length is the argument."""
|
"""Return a boolean of whether the value's length is the argument."""
|
||||||
|
warnings.warn(
|
||||||
|
"The length_is template filter is deprecated in favor of the length template "
|
||||||
|
"filter and the == operator within an {% if %} tag.",
|
||||||
|
RemovedInDjango51Warning,
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
return len(value) == int(arg)
|
return len(value) == int(arg)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
|
|
|
@ -22,6 +22,8 @@ details on these changes.
|
||||||
* The ``AlterIndexTogether`` migration operation will be removed. A stub
|
* The ``AlterIndexTogether`` migration operation will be removed. A stub
|
||||||
operation will remain for compatibility with historical migrations.
|
operation will remain for compatibility with historical migrations.
|
||||||
|
|
||||||
|
* The ``length_is`` template filter will be removed.
|
||||||
|
|
||||||
.. _deprecation-removed-in-5.0:
|
.. _deprecation-removed-in-5.0:
|
||||||
|
|
||||||
5.0
|
5.0
|
||||||
|
|
|
@ -1906,6 +1906,8 @@ The filter returns ``0`` for an undefined variable.
|
||||||
``length_is``
|
``length_is``
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
.. deprecated:: 4.2
|
||||||
|
|
||||||
Returns ``True`` if the value's length is the argument, or ``False`` otherwise.
|
Returns ``True`` if the value's length is the argument, or ``False`` otherwise.
|
||||||
|
|
||||||
For example::
|
For example::
|
||||||
|
|
|
@ -317,3 +317,18 @@ Miscellaneous
|
||||||
for using Python's :py:mod:`secrets` module to generate passwords.
|
for using Python's :py:mod:`secrets` module to generate passwords.
|
||||||
|
|
||||||
* The ``AlterIndexTogether`` migration operation is deprecated.
|
* The ``AlterIndexTogether`` migration operation is deprecated.
|
||||||
|
|
||||||
|
* The ``length_is`` template filter is deprecated in favor of :tfilter:`length`
|
||||||
|
and the ``==`` operator within an :ttag:`{% if %}<if>` tag. For example
|
||||||
|
|
||||||
|
.. code-block:: html+django
|
||||||
|
|
||||||
|
{% if value|length == 4 %}…{% endif %}
|
||||||
|
{% if value|length == 4 %}True{% else %}False{% endif %}
|
||||||
|
|
||||||
|
instead of:
|
||||||
|
|
||||||
|
.. code-block:: html+django
|
||||||
|
|
||||||
|
{% if value|length_is:4 %}…{% endif %}
|
||||||
|
{{ value|length_is:4 }}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
from django.template.defaultfilters import length_is
|
from django.template.defaultfilters import length_is
|
||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase, ignore_warnings
|
||||||
|
from django.utils.deprecation import RemovedInDjango51Warning
|
||||||
|
|
||||||
from ..utils import setup
|
from ..utils import setup
|
||||||
|
|
||||||
|
|
||||||
|
@ignore_warnings(category=RemovedInDjango51Warning)
|
||||||
class LengthIsTests(SimpleTestCase):
|
class LengthIsTests(SimpleTestCase):
|
||||||
@setup({"length_is01": '{% if some_list|length_is:"4" %}Four{% endif %}'})
|
@setup({"length_is01": '{% if some_list|length_is:"4" %}Four{% endif %}'})
|
||||||
def test_length_is01(self):
|
def test_length_is01(self):
|
||||||
|
@ -103,6 +105,7 @@ class LengthIsTests(SimpleTestCase):
|
||||||
self.assertEqual(output, "")
|
self.assertEqual(output, "")
|
||||||
|
|
||||||
|
|
||||||
|
@ignore_warnings(category=RemovedInDjango51Warning)
|
||||||
class FunctionTests(SimpleTestCase):
|
class FunctionTests(SimpleTestCase):
|
||||||
def test_empty_list(self):
|
def test_empty_list(self):
|
||||||
self.assertIs(length_is([], 0), True)
|
self.assertIs(length_is([], 0), True)
|
||||||
|
@ -111,3 +114,17 @@ class FunctionTests(SimpleTestCase):
|
||||||
def test_string(self):
|
def test_string(self):
|
||||||
self.assertIs(length_is("a", 1), True)
|
self.assertIs(length_is("a", 1), True)
|
||||||
self.assertIs(length_is("a", 10), False)
|
self.assertIs(length_is("a", 10), False)
|
||||||
|
|
||||||
|
|
||||||
|
class DeprecationTests(SimpleTestCase):
|
||||||
|
@setup(
|
||||||
|
{"length_is_warning": "{{ string|length_is:3 }}"},
|
||||||
|
test_once=True,
|
||||||
|
)
|
||||||
|
def test_length_is_warning(self):
|
||||||
|
msg = (
|
||||||
|
"The length_is template filter is deprecated in favor of the length "
|
||||||
|
"template filter and the == operator within an {% if %} tag."
|
||||||
|
)
|
||||||
|
with self.assertRaisesMessage(RemovedInDjango51Warning, msg):
|
||||||
|
self.engine.render_to_string("length_is_warning", {"string": "good"})
|
||||||
|
|
Loading…
Reference in New Issue