mirror of
				https://github.com/django/django.git
				synced 2025-11-03 21:25:09 +00:00 
			
		
		
		
	Refs #25236 -- Removed {% ifequal %} and {% ifnotequal %} template tags per deprecation timeline.
This commit is contained in:
		
							parent
							
								
									2dd6a83d2d
								
							
						
					
					
						commit
						e7208f13c0
					
				
					 6 changed files with 4 additions and 362 deletions
				
			
		| 
						 | 
					@ -8,7 +8,6 @@ from itertools import cycle as itertools_cycle, groupby
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.utils import timezone
 | 
					from django.utils import timezone
 | 
				
			||||||
from django.utils.deprecation import RemovedInDjango40Warning
 | 
					 | 
				
			||||||
from django.utils.html import conditional_escape, format_html
 | 
					from django.utils.html import conditional_escape, format_html
 | 
				
			||||||
from django.utils.lorem_ipsum import paragraphs, words
 | 
					from django.utils.lorem_ipsum import paragraphs, words
 | 
				
			||||||
from django.utils.safestring import mark_safe
 | 
					from django.utils.safestring import mark_safe
 | 
				
			||||||
| 
						 | 
					@ -261,26 +260,6 @@ class IfChangedNode(Node):
 | 
				
			||||||
            return context.render_context
 | 
					            return context.render_context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class IfEqualNode(Node):
 | 
					 | 
				
			||||||
    # RemovedInDjango40Warning.
 | 
					 | 
				
			||||||
    child_nodelists = ('nodelist_true', 'nodelist_false')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, var1, var2, nodelist_true, nodelist_false, negate):
 | 
					 | 
				
			||||||
        self.var1, self.var2 = var1, var2
 | 
					 | 
				
			||||||
        self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
 | 
					 | 
				
			||||||
        self.negate = negate
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __repr__(self):
 | 
					 | 
				
			||||||
        return '<%s>' % self.__class__.__name__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def render(self, context):
 | 
					 | 
				
			||||||
        val1 = self.var1.resolve(context, ignore_failures=True)
 | 
					 | 
				
			||||||
        val2 = self.var2.resolve(context, ignore_failures=True)
 | 
					 | 
				
			||||||
        if (self.negate and val1 != val2) or (not self.negate and val1 == val2):
 | 
					 | 
				
			||||||
            return self.nodelist_true.render(context)
 | 
					 | 
				
			||||||
        return self.nodelist_false.render(context)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class IfNode(Node):
 | 
					class IfNode(Node):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, conditions_nodelists):
 | 
					    def __init__(self, conditions_nodelists):
 | 
				
			||||||
| 
						 | 
					@ -821,62 +800,6 @@ def do_for(parser, token):
 | 
				
			||||||
    return ForNode(loopvars, sequence, is_reversed, nodelist_loop, nodelist_empty)
 | 
					    return ForNode(loopvars, sequence, is_reversed, nodelist_loop, nodelist_empty)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def do_ifequal(parser, token, negate):
 | 
					 | 
				
			||||||
    # RemovedInDjango40Warning.
 | 
					 | 
				
			||||||
    bits = list(token.split_contents())
 | 
					 | 
				
			||||||
    if len(bits) != 3:
 | 
					 | 
				
			||||||
        raise TemplateSyntaxError("%r takes two arguments" % bits[0])
 | 
					 | 
				
			||||||
    end_tag = 'end' + bits[0]
 | 
					 | 
				
			||||||
    nodelist_true = parser.parse(('else', end_tag))
 | 
					 | 
				
			||||||
    token = parser.next_token()
 | 
					 | 
				
			||||||
    if token.contents == 'else':
 | 
					 | 
				
			||||||
        nodelist_false = parser.parse((end_tag,))
 | 
					 | 
				
			||||||
        parser.delete_first_token()
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        nodelist_false = NodeList()
 | 
					 | 
				
			||||||
    val1 = parser.compile_filter(bits[1])
 | 
					 | 
				
			||||||
    val2 = parser.compile_filter(bits[2])
 | 
					 | 
				
			||||||
    return IfEqualNode(val1, val2, nodelist_true, nodelist_false, negate)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@register.tag
 | 
					 | 
				
			||||||
def ifequal(parser, token):
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    Output the contents of the block if the two arguments equal each other.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Examples::
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        {% ifequal user.id comment.user_id %}
 | 
					 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
        {% endifequal %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        {% ifnotequal user.id comment.user_id %}
 | 
					 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
        {% else %}
 | 
					 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
        {% endifnotequal %}
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    warnings.warn(
 | 
					 | 
				
			||||||
        'The {% ifequal %} template tag is deprecated in favor of {% if %}.',
 | 
					 | 
				
			||||||
        RemovedInDjango40Warning,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    return do_ifequal(parser, token, False)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@register.tag
 | 
					 | 
				
			||||||
def ifnotequal(parser, token):
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    Output the contents of the block if the two arguments are not equal.
 | 
					 | 
				
			||||||
    See ifequal.
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    warnings.warn(
 | 
					 | 
				
			||||||
        'The {% ifnotequal %} template tag is deprecated in favor of '
 | 
					 | 
				
			||||||
        '{% if %}.',
 | 
					 | 
				
			||||||
        RemovedInDjango40Warning,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    return do_ifequal(parser, token, True)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TemplateLiteral(Literal):
 | 
					class TemplateLiteral(Literal):
 | 
				
			||||||
    def __init__(self, value, text):
 | 
					    def __init__(self, value, text):
 | 
				
			||||||
        self.value = value
 | 
					        self.value = value
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -608,15 +608,6 @@ you should use::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% if a > b and b > c %}
 | 
					    {% if a > b and b > c %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``ifequal`` and ``ifnotequal``
 | 
					 | 
				
			||||||
------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. deprecated:: 3.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
``{% ifequal a b %} ... {% endifequal %}`` is an obsolete way to write
 | 
					 | 
				
			||||||
``{% if a == b %} ... {% endif %}``. Likewise, ``{% ifnotequal a b %} ...
 | 
					 | 
				
			||||||
{% endifnotequal %}`` is superseded by ``{% if a != b %} ... {% endif %}``.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.. templatetag:: ifchanged
 | 
					.. templatetag:: ifchanged
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``ifchanged``
 | 
					``ifchanged``
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -321,3 +321,5 @@ to remove usage of these features.
 | 
				
			||||||
  ``django.contrib.postgres.fields.jsonb.KeyTextTransform`` are removed.
 | 
					  ``django.contrib.postgres.fields.jsonb.KeyTextTransform`` are removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* ``django.contrib.postgres.forms.JSONField`` is removed.
 | 
					* ``django.contrib.postgres.forms.JSONField`` is removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The ``{% ifequal %}`` and ``{% ifnotequal %}`` template tags are removed.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,5 @@
 | 
				
			||||||
from django.template import TemplateSyntaxError
 | 
					from django.template import TemplateSyntaxError
 | 
				
			||||||
from django.test import SimpleTestCase, ignore_warnings
 | 
					from django.test import SimpleTestCase
 | 
				
			||||||
from django.utils.deprecation import RemovedInDjango40Warning
 | 
					 | 
				
			||||||
from django.utils.safestring import mark_safe
 | 
					from django.utils.safestring import mark_safe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from ..utils import SafeClass, UnsafeClass, setup
 | 
					from ..utils import SafeClass, UnsafeClass, setup
 | 
				
			||||||
| 
						 | 
					@ -82,15 +81,6 @@ class AutoescapeTagTests(SimpleTestCase):
 | 
				
			||||||
        with self.assertRaises(TemplateSyntaxError):
 | 
					        with self.assertRaises(TemplateSyntaxError):
 | 
				
			||||||
            self.engine.render_to_string('autoescape-filtertag01', {'first': '<a>'})
 | 
					            self.engine.render_to_string('autoescape-filtertag01', {'first': '<a>'})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ignore_warnings(category=RemovedInDjango40Warning)
 | 
					 | 
				
			||||||
    @setup({'autoescape-ifequal01': '{% ifequal var "this & that" %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_autoescape_ifequal01(self):
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        ifequal compares unescaped vales.
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('autoescape-ifequal01', {'var': 'this & that'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Arguments to filters are 'safe' and manipulate their input unescaped.
 | 
					    # Arguments to filters are 'safe' and manipulate their input unescaped.
 | 
				
			||||||
    @setup({'autoescape-filters01': '{{ var|cut:"&" }}'})
 | 
					    @setup({'autoescape-filters01': '{{ var|cut:"&" }}'})
 | 
				
			||||||
    def test_autoescape_filters01(self):
 | 
					    def test_autoescape_filters01(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,257 +0,0 @@
 | 
				
			||||||
from django.template import TemplateSyntaxError
 | 
					 | 
				
			||||||
from django.template.defaulttags import IfEqualNode
 | 
					 | 
				
			||||||
from django.test import SimpleTestCase, ignore_warnings
 | 
					 | 
				
			||||||
from django.utils.deprecation import RemovedInDjango40Warning
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from ..utils import setup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ignore_warnings(category=RemovedInDjango40Warning)
 | 
					 | 
				
			||||||
class IfEqualTagTests(SimpleTestCase):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal01': '{% ifequal a b %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal01(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal01', {'a': 1, 'b': 2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal02': '{% ifequal a b %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal02(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal02', {'a': 1, 'b': 1})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal03': '{% ifequal a b %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal03(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal03', {'a': 1, 'b': 2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal04': '{% ifequal a b %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal04(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal04', {'a': 1, 'b': 1})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal05': '{% ifequal a \'test\' %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal05(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal05', {'a': 'test'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal06': '{% ifequal a \'test\' %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal06(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal06', {'a': 'no'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal07': '{% ifequal a "test" %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal07(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal07', {'a': 'test'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal08': '{% ifequal a "test" %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal08(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal08', {'a': 'no'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal09': '{% ifequal a "test" %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal09(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal09')
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal10': '{% ifequal a b %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal10(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal10')
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # SMART SPLITTING
 | 
					 | 
				
			||||||
    @setup({'ifequal-split01': '{% ifequal a "test man" %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split01(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split01')
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split02': '{% ifequal a "test man" %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split02(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split02', {'a': 'foo'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split03': '{% ifequal a "test man" %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split03(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split03', {'a': 'test man'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split04': '{% ifequal a \'test man\' %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split04(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split04', {'a': 'test man'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split05': '{% ifequal a \'i "love" you\' %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split05(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split05', {'a': ''})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split06': '{% ifequal a \'i "love" you\' %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split06(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split06', {'a': 'i "love" you'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split07': '{% ifequal a \'i "love" you\' %}yes{% else %}no{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_split07(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split07', {'a': 'i love you'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split08': r"{% ifequal a 'I\'m happy' %}yes{% else %}no{% endifequal %}"})
 | 
					 | 
				
			||||||
    def test_ifequal_split08(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split08', {'a': "I'm happy"})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split09': r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}"})
 | 
					 | 
				
			||||||
    def test_ifequal_split09(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split09', {'a': r'slash\man'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-split10': r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}"})
 | 
					 | 
				
			||||||
    def test_ifequal_split10(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-split10', {'a': 'slashman'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # NUMERIC RESOLUTION
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric01': '{% ifequal x 5 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric01(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric01', {'x': '5'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric02': '{% ifequal x 5 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric02(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric02', {'x': 5})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric03': '{% ifequal x 5.2 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric03(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric03', {'x': 5})
 | 
					 | 
				
			||||||
        self.assertEqual(output, '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric04': '{% ifequal x 5.2 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric04(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric04', {'x': 5.2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric05': '{% ifequal x 0.2 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric05(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric05', {'x': 0.2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric06': '{% ifequal x .2 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric06(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric06', {'x': 0.2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric07': '{% ifequal x 2. %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric07(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric07', {'x': 2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric08': '{% ifequal x "5" %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric08(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric08', {'x': 5})
 | 
					 | 
				
			||||||
        self.assertEqual(output, '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric09': '{% ifequal x "5" %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric09(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric09', {'x': '5'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric10': '{% ifequal x -5 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric10(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric10', {'x': -5})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric11': '{% ifequal x -5.2 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric11(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric11', {'x': -5.2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-numeric12': '{% ifequal x +5 %}yes{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_numeric12(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-numeric12', {'x': 5})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # FILTER EXPRESSIONS AS ARGUMENTS
 | 
					 | 
				
			||||||
    @setup({'ifequal-filter01': '{% ifequal a|upper "A" %}x{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_filter01(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-filter01', {'a': 'a'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'x')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-filter02': '{% ifequal "A" a|upper %}x{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_filter02(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-filter02', {'a': 'a'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'x')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-filter03': '{% ifequal a|upper b|upper %}x{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_filter03(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-filter03', {'a': 'x', 'b': 'X'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'x')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-filter04': '{% ifequal x|slice:"1" "a" %}x{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_filter04(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-filter04', {'x': 'aaa'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'x')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifequal-filter05': '{% ifequal x|slice:"1"|upper "A" %}x{% endifequal %}'})
 | 
					 | 
				
			||||||
    def test_ifequal_filter05(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifequal-filter05', {'x': 'aaa'})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'x')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ignore_warnings(category=RemovedInDjango40Warning)
 | 
					 | 
				
			||||||
class IfNotEqualTagTests(SimpleTestCase):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifnotequal01': '{% ifnotequal a b %}yes{% endifnotequal %}'})
 | 
					 | 
				
			||||||
    def test_ifnotequal01(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifnotequal01', {'a': 1, 'b': 2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifnotequal02': '{% ifnotequal a b %}yes{% endifnotequal %}'})
 | 
					 | 
				
			||||||
    def test_ifnotequal02(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifnotequal02', {'a': 1, 'b': 1})
 | 
					 | 
				
			||||||
        self.assertEqual(output, '')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifnotequal03': '{% ifnotequal a b %}yes{% else %}no{% endifnotequal %}'})
 | 
					 | 
				
			||||||
    def test_ifnotequal03(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifnotequal03', {'a': 1, 'b': 2})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'yes')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'ifnotequal04': '{% ifnotequal a b %}yes{% else %}no{% endifnotequal %}'})
 | 
					 | 
				
			||||||
    def test_ifnotequal04(self):
 | 
					 | 
				
			||||||
        output = self.engine.render_to_string('ifnotequal04', {'a': 1, 'b': 1})
 | 
					 | 
				
			||||||
        self.assertEqual(output, 'no')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup({'one_var': '{% ifnotequal a %}yes{% endifnotequal %}'})
 | 
					 | 
				
			||||||
    def test_one_var(self):
 | 
					 | 
				
			||||||
        with self.assertRaisesMessage(TemplateSyntaxError, "'ifnotequal' takes two arguments"):
 | 
					 | 
				
			||||||
            self.engine.render_to_string('one_var', {'a': 1})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class DeprecationTests(SimpleTestCase):
 | 
					 | 
				
			||||||
    @setup(
 | 
					 | 
				
			||||||
        {'ifequal_warning': '{% ifequal a b %}yes{% endifequal %}'},
 | 
					 | 
				
			||||||
        test_once=True,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    def test_ifequal_warning(self):
 | 
					 | 
				
			||||||
        msg = (
 | 
					 | 
				
			||||||
            'The {% ifequal %} template tag is deprecated in favor of '
 | 
					 | 
				
			||||||
            '{% if %}.'
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        with self.assertRaisesMessage(RemovedInDjango40Warning, msg):
 | 
					 | 
				
			||||||
            self.engine.render_to_string('ifequal_warning', {'a': 1, 'b': 2})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @setup(
 | 
					 | 
				
			||||||
        {'ifnotequal_warning': '{% ifnotequal a b %}yes{% endifnoequal %}'},
 | 
					 | 
				
			||||||
        test_once=True,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    def test_ifnotequal_warning(self):
 | 
					 | 
				
			||||||
        msg = (
 | 
					 | 
				
			||||||
            'The {% ifnotequal %} template tag is deprecated in favor of '
 | 
					 | 
				
			||||||
            '{% if %}.'
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        with self.assertRaisesMessage(RemovedInDjango40Warning, msg):
 | 
					 | 
				
			||||||
            self.engine.render_to_string('ifnotequal_warning', {'a': 1, 'b': 2})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_repr(self):
 | 
					 | 
				
			||||||
        node = IfEqualNode(var1='a', var2='b', nodelist_true=[], nodelist_false=[], negate=False)
 | 
					 | 
				
			||||||
        self.assertEqual(repr(node), '<IfEqualNode>')
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,6 @@
 | 
				
			||||||
from django.template import Context, Engine
 | 
					from django.template import Context, Engine
 | 
				
			||||||
from django.template.base import TextNode, VariableNode
 | 
					from django.template.base import TextNode, VariableNode
 | 
				
			||||||
from django.test import SimpleTestCase, ignore_warnings
 | 
					from django.test import SimpleTestCase
 | 
				
			||||||
from django.utils.deprecation import RemovedInDjango40Warning
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class NodelistTest(SimpleTestCase):
 | 
					class NodelistTest(SimpleTestCase):
 | 
				
			||||||
| 
						 | 
					@ -21,12 +20,6 @@ class NodelistTest(SimpleTestCase):
 | 
				
			||||||
        vars = template.nodelist.get_nodes_by_type(VariableNode)
 | 
					        vars = template.nodelist.get_nodes_by_type(VariableNode)
 | 
				
			||||||
        self.assertEqual(len(vars), 1)
 | 
					        self.assertEqual(len(vars), 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ignore_warnings(category=RemovedInDjango40Warning)
 | 
					 | 
				
			||||||
    def test_ifequal(self):
 | 
					 | 
				
			||||||
        template = self.engine.from_string('{% ifequal x y %}{{ a }}{% endifequal %}')
 | 
					 | 
				
			||||||
        vars = template.nodelist.get_nodes_by_type(VariableNode)
 | 
					 | 
				
			||||||
        self.assertEqual(len(vars), 1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_ifchanged(self):
 | 
					    def test_ifchanged(self):
 | 
				
			||||||
        template = self.engine.from_string('{% ifchanged x %}{{ a }}{% endifchanged %}')
 | 
					        template = self.engine.from_string('{% ifchanged x %}{{ a }}{% endifchanged %}')
 | 
				
			||||||
        vars = template.nodelist.get_nodes_by_type(VariableNode)
 | 
					        vars = template.nodelist.get_nodes_by_type(VariableNode)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue