Loading django/template/defaulttags.py +1 −1 Original line number Diff line number Diff line Loading @@ -999,7 +999,7 @@ def do_if(parser, token): ``{% if 1>2 %}`` is not a valid if tag. All supported operators are: ``or``, ``and``, ``in``, ``not in`` ``==`` (or ``=``), ``!=``, ``>``, ``>=``, ``<`` and ``<=``. ``==``, ``!=``, ``>``, ``>=``, ``<`` and ``<=``. Operator precedence follows Python. """ Loading django/template/smartif.py +9 −0 Original line number Diff line number Diff line """ Parser and utilities for the smart 'if' tag """ import warnings from django.utils.deprecation import RemovedInDjango20Warning # Using a simple top down parser, as described here: Loading Loading @@ -99,6 +102,7 @@ OPERATORS = { 'not': prefix(8, lambda context, x: not x.eval(context)), 'in': infix(9, lambda context, x, y: x.eval(context) in y.eval(context)), 'not in': infix(9, lambda context, x, y: x.eval(context) not in y.eval(context)), # This should be removed in Django 2.0: '=': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)), '==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)), '!=': infix(10, lambda context, x, y: x.eval(context) != y.eval(context)), Loading Loading @@ -174,6 +178,11 @@ class IfParser(object): except (KeyError, TypeError): return self.create_var(token) else: if token == '=': warnings.warn( "Operator '=' is deprecated and will be removed in Django 2.0. Use '==' instead.", RemovedInDjango20Warning, stacklevel=2 ) return op() def next_token(self): Loading docs/internals/deprecation.txt +3 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,9 @@ details on these changes. * The ``ssi`` template tag will be removed. * Support for the ``=`` comparison operator in the ``if`` template tag will be removed. .. _deprecation-removed-in-1.9: 1.9 Loading docs/releases/1.8.txt +6 −0 Original line number Diff line number Diff line Loading @@ -1492,6 +1492,12 @@ absolute path. This is of limited use in most deployment situations, and the :ttag:`include` tag often makes more sense. This tag is now deprecated and will be removed in Django 2.0. ``=`` as comparison operator in ``if`` template tag ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using a single equals sign with the ``{% if %}`` template tag for equality testing was undocumented and untested. It's now deprecated in favor of ``==``. .. removed-features-1.8: Features removed in 1.8 Loading tests/template_tests/syntax_tests/test_if.py +43 −1 Original line number Diff line number Diff line import warnings from django.template import TemplateSyntaxError from django.test import SimpleTestCase from django.test import ignore_warnings, SimpleTestCase from django.utils.deprecation import RemovedInDjango20Warning from ..utils import setup, TestObj Loading Loading @@ -521,3 +524,42 @@ class IfTagTests(SimpleTestCase): def test_if_tag_badarg04(self): output = self.engine.render_to_string('if-tag-badarg04') self.assertEqual(output, 'no') @setup({'if-tag-eq-deprecated': '{% if foo = bar %}yes{% else %}no{% endif %}'}, test_once=True) def test_if_tag_eq_deprecated(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') output = self.engine.render_to_string('if-tag-eq-deprecated') self.assertEqual(output, 'yes') self.assertEqual(len(warns), 1) self.assertEqual( str(warns[0].message), "Operator '=' is deprecated and will be removed in Django 2.0. " "Use '==' instead." ) @ignore_warnings(category=RemovedInDjango20Warning) class TestEqualitySingleEqualsSign(SimpleTestCase): # The following tests should be changed to template.TemplateSyntaxError # (or simply removed) when the deprecation path ends in Django 2.0. @setup({'if-tag-eq01': '{% if foo = bar %}yes{% else %}no{% endif %}'}) def test_if_tag_eq01(self): output = self.engine.render_to_string('if-tag-eq01', {'foo': 1}) self.assertEqual(output, 'no') @setup({'if-tag-eq02': '{% if foo = bar %}yes{% else %}no{% endif %}'}) def test_if_tag_eq02(self): output = self.engine.render_to_string('if-tag-eq02', {'foo': 1, 'bar': 1}) self.assertEqual(output, 'yes') @setup({'if-tag-eq03': '{% if foo = bar %}yes{% else %}no{% endif %}'}) def test_if_tag_eq03(self): output = self.engine.render_to_string('if-tag-eq03', {'foo': 1, 'bar': 2}) self.assertEqual(output, 'no') @setup({'if-tag-eq04': '{% if foo == \'\' %}yes{% else %}no{% endif %}'}) def test_if_tag_eq04(self): output = self.engine.render_to_string('if-tag-eq04') self.assertEqual(output, 'no') Loading
django/template/defaulttags.py +1 −1 Original line number Diff line number Diff line Loading @@ -999,7 +999,7 @@ def do_if(parser, token): ``{% if 1>2 %}`` is not a valid if tag. All supported operators are: ``or``, ``and``, ``in``, ``not in`` ``==`` (or ``=``), ``!=``, ``>``, ``>=``, ``<`` and ``<=``. ``==``, ``!=``, ``>``, ``>=``, ``<`` and ``<=``. Operator precedence follows Python. """ Loading
django/template/smartif.py +9 −0 Original line number Diff line number Diff line """ Parser and utilities for the smart 'if' tag """ import warnings from django.utils.deprecation import RemovedInDjango20Warning # Using a simple top down parser, as described here: Loading Loading @@ -99,6 +102,7 @@ OPERATORS = { 'not': prefix(8, lambda context, x: not x.eval(context)), 'in': infix(9, lambda context, x, y: x.eval(context) in y.eval(context)), 'not in': infix(9, lambda context, x, y: x.eval(context) not in y.eval(context)), # This should be removed in Django 2.0: '=': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)), '==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)), '!=': infix(10, lambda context, x, y: x.eval(context) != y.eval(context)), Loading Loading @@ -174,6 +178,11 @@ class IfParser(object): except (KeyError, TypeError): return self.create_var(token) else: if token == '=': warnings.warn( "Operator '=' is deprecated and will be removed in Django 2.0. Use '==' instead.", RemovedInDjango20Warning, stacklevel=2 ) return op() def next_token(self): Loading
docs/internals/deprecation.txt +3 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,9 @@ details on these changes. * The ``ssi`` template tag will be removed. * Support for the ``=`` comparison operator in the ``if`` template tag will be removed. .. _deprecation-removed-in-1.9: 1.9 Loading
docs/releases/1.8.txt +6 −0 Original line number Diff line number Diff line Loading @@ -1492,6 +1492,12 @@ absolute path. This is of limited use in most deployment situations, and the :ttag:`include` tag often makes more sense. This tag is now deprecated and will be removed in Django 2.0. ``=`` as comparison operator in ``if`` template tag ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using a single equals sign with the ``{% if %}`` template tag for equality testing was undocumented and untested. It's now deprecated in favor of ``==``. .. removed-features-1.8: Features removed in 1.8 Loading
tests/template_tests/syntax_tests/test_if.py +43 −1 Original line number Diff line number Diff line import warnings from django.template import TemplateSyntaxError from django.test import SimpleTestCase from django.test import ignore_warnings, SimpleTestCase from django.utils.deprecation import RemovedInDjango20Warning from ..utils import setup, TestObj Loading Loading @@ -521,3 +524,42 @@ class IfTagTests(SimpleTestCase): def test_if_tag_badarg04(self): output = self.engine.render_to_string('if-tag-badarg04') self.assertEqual(output, 'no') @setup({'if-tag-eq-deprecated': '{% if foo = bar %}yes{% else %}no{% endif %}'}, test_once=True) def test_if_tag_eq_deprecated(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') output = self.engine.render_to_string('if-tag-eq-deprecated') self.assertEqual(output, 'yes') self.assertEqual(len(warns), 1) self.assertEqual( str(warns[0].message), "Operator '=' is deprecated and will be removed in Django 2.0. " "Use '==' instead." ) @ignore_warnings(category=RemovedInDjango20Warning) class TestEqualitySingleEqualsSign(SimpleTestCase): # The following tests should be changed to template.TemplateSyntaxError # (or simply removed) when the deprecation path ends in Django 2.0. @setup({'if-tag-eq01': '{% if foo = bar %}yes{% else %}no{% endif %}'}) def test_if_tag_eq01(self): output = self.engine.render_to_string('if-tag-eq01', {'foo': 1}) self.assertEqual(output, 'no') @setup({'if-tag-eq02': '{% if foo = bar %}yes{% else %}no{% endif %}'}) def test_if_tag_eq02(self): output = self.engine.render_to_string('if-tag-eq02', {'foo': 1, 'bar': 1}) self.assertEqual(output, 'yes') @setup({'if-tag-eq03': '{% if foo = bar %}yes{% else %}no{% endif %}'}) def test_if_tag_eq03(self): output = self.engine.render_to_string('if-tag-eq03', {'foo': 1, 'bar': 2}) self.assertEqual(output, 'no') @setup({'if-tag-eq04': '{% if foo == \'\' %}yes{% else %}no{% endif %}'}) def test_if_tag_eq04(self): output = self.engine.render_to_string('if-tag-eq04') self.assertEqual(output, 'no')