Loading django/template/smartif.py +1 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,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)), 'is': infix(10, lambda context, x, y: x.eval(context) is 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)), '>': infix(10, lambda context, x, y: x.eval(context) > y.eval(context)), Loading docs/ref/templates/builtins.txt +12 −1 Original line number Diff line number Diff line Loading @@ -432,7 +432,7 @@ Use of actual parentheses in the :ttag:`if` tag is invalid syntax. If you need them to indicate precedence, you should use nested :ttag:`if` tags. :ttag:`if` tags may also use the operators ``==``, ``!=``, ``<``, ``>``, ``<=``, ``>=`` and ``in`` which work as follows: ``<=``, ``>=``, ``in``, and ``is`` which work as follows: ``==`` operator ^^^^^^^^^^^^^^^ Loading Loading @@ -524,6 +524,17 @@ you should use:: {% if a > b and b > c %} ``is`` operator ^^^^^^^^^^^^^^^ .. versionadded:: 1.10 Object identity. Tests if two values are the same object. Example:: {% if value is None %} This will output if and only if value is None. {% endif %} Filters ~~~~~~~ Loading docs/releases/1.10.txt +2 −0 Original line number Diff line number Diff line Loading @@ -291,6 +291,8 @@ Templates :class:`~django.template.backends.django.DjangoTemplates` backend and the :class:`~django.template.Engine` class. * Added the ``is`` comparison operator to the :ttag:`if` tag. Tests ~~~~~ Loading tests/template_tests/syntax_tests/test_if.py +10 −0 Original line number Diff line number Diff line Loading @@ -527,3 +527,13 @@ class IfTagTests(SimpleTestCase): # A single equals sign is a syntax error. with self.assertRaises(TemplateSyntaxError): self.engine.render_to_string('if-tag-single-eq', {'foo': 1}) @setup({'template': '{% if foo is True %}yes{% else %}no{% endif %}'}) def test_if_is_match(self): output = self.engine.render_to_string('template', {'foo': True}) self.assertEqual(output, 'yes') @setup({'template': '{% if foo is True %}yes{% else %}no{% endif %}'}) def test_if_is_no_match(self): output = self.engine.render_to_string('template', {'foo': 1}) self.assertEqual(output, 'no') Loading
django/template/smartif.py +1 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,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)), 'is': infix(10, lambda context, x, y: x.eval(context) is 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)), '>': infix(10, lambda context, x, y: x.eval(context) > y.eval(context)), Loading
docs/ref/templates/builtins.txt +12 −1 Original line number Diff line number Diff line Loading @@ -432,7 +432,7 @@ Use of actual parentheses in the :ttag:`if` tag is invalid syntax. If you need them to indicate precedence, you should use nested :ttag:`if` tags. :ttag:`if` tags may also use the operators ``==``, ``!=``, ``<``, ``>``, ``<=``, ``>=`` and ``in`` which work as follows: ``<=``, ``>=``, ``in``, and ``is`` which work as follows: ``==`` operator ^^^^^^^^^^^^^^^ Loading Loading @@ -524,6 +524,17 @@ you should use:: {% if a > b and b > c %} ``is`` operator ^^^^^^^^^^^^^^^ .. versionadded:: 1.10 Object identity. Tests if two values are the same object. Example:: {% if value is None %} This will output if and only if value is None. {% endif %} Filters ~~~~~~~ Loading
docs/releases/1.10.txt +2 −0 Original line number Diff line number Diff line Loading @@ -291,6 +291,8 @@ Templates :class:`~django.template.backends.django.DjangoTemplates` backend and the :class:`~django.template.Engine` class. * Added the ``is`` comparison operator to the :ttag:`if` tag. Tests ~~~~~ Loading
tests/template_tests/syntax_tests/test_if.py +10 −0 Original line number Diff line number Diff line Loading @@ -527,3 +527,13 @@ class IfTagTests(SimpleTestCase): # A single equals sign is a syntax error. with self.assertRaises(TemplateSyntaxError): self.engine.render_to_string('if-tag-single-eq', {'foo': 1}) @setup({'template': '{% if foo is True %}yes{% else %}no{% endif %}'}) def test_if_is_match(self): output = self.engine.render_to_string('template', {'foo': True}) self.assertEqual(output, 'yes') @setup({'template': '{% if foo is True %}yes{% else %}no{% endif %}'}) def test_if_is_no_match(self): output = self.engine.render_to_string('template', {'foo': 1}) self.assertEqual(output, 'no')