Commit c00ae7f5 authored by Preston Timmons's avatar Preston Timmons Committed by Tim Graham
Browse files

Fixed #26118 -- Added 'is' operator to if template tag.

parent a08d2463
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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)),
+12 −1
Original line number Diff line number Diff line
@@ -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
^^^^^^^^^^^^^^^
@@ -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
~~~~~~~

+2 −0
Original line number Diff line number Diff line
@@ -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
~~~~~

+10 −0
Original line number Diff line number Diff line
@@ -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')