mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	Fixed #26118 -- Added 'is' operator to if template tag.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							a08d2463d2
						
					
				
				
					commit
					c00ae7f58c
				
			| @@ -98,6 +98,7 @@ OPERATORS = { | |||||||
|     'not': prefix(8, lambda context, x: not x.eval(context)), |     'not': prefix(8, lambda context, x: not x.eval(context)), | ||||||
|     'in': infix(9, lambda context, x, y: x.eval(context) in y.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)), |     '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)), |     '!=': 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)), | ||||||
|   | |||||||
| @@ -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. | them to indicate precedence, you should use nested :ttag:`if` tags. | ||||||
|  |  | ||||||
| :ttag:`if` tags may also use the operators ``==``, ``!=``, ``<``, ``>``, | :ttag:`if` tags may also use the operators ``==``, ``!=``, ``<``, ``>``, | ||||||
| ``<=``, ``>=`` and ``in`` which work as follows: | ``<=``, ``>=``, ``in``, and ``is`` which work as follows: | ||||||
|  |  | ||||||
| ``==`` operator | ``==`` operator | ||||||
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^ | ||||||
| @@ -524,6 +524,17 @@ you should use:: | |||||||
|  |  | ||||||
|     {% if a > b and b > c %} |     {% 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 | Filters | ||||||
| ~~~~~~~ | ~~~~~~~ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -291,6 +291,8 @@ Templates | |||||||
|   :class:`~django.template.backends.django.DjangoTemplates` backend and the |   :class:`~django.template.backends.django.DjangoTemplates` backend and the | ||||||
|   :class:`~django.template.Engine` class. |   :class:`~django.template.Engine` class. | ||||||
|  |  | ||||||
|  | * Added the ``is`` comparison operator to the :ttag:`if` tag. | ||||||
|  |  | ||||||
| Tests | Tests | ||||||
| ~~~~~ | ~~~~~ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -527,3 +527,13 @@ class IfTagTests(SimpleTestCase): | |||||||
|         # A single equals sign is a syntax error. |         # A single equals sign is a syntax error. | ||||||
|         with self.assertRaises(TemplateSyntaxError): |         with self.assertRaises(TemplateSyntaxError): | ||||||
|             self.engine.render_to_string('if-tag-single-eq', {'foo': 1}) |             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') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user