mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #18995 -- Made blocktranslate tag raise TemplateSyntaxError when plural count is not a number.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							848770dd2c
						
					
				
				
					commit
					01a7af09b9
				
			| @@ -1,3 +1,5 @@ | ||||
| from decimal import Decimal | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.template import Library, Node, TemplateSyntaxError, Variable | ||||
| from django.template.base import TokenType, render_value_in_context | ||||
| @@ -135,6 +137,11 @@ class BlockTranslateNode(Node): | ||||
|         singular, vars = self.render_token_list(self.singular) | ||||
|         if self.plural and self.countervar and self.counter: | ||||
|             count = self.counter.resolve(context) | ||||
|             if not isinstance(count, (Decimal, float, int)): | ||||
|                 raise TemplateSyntaxError( | ||||
|                     "%r argument to %r tag must be a number." | ||||
|                     % (self.countervar, self.tag_name) | ||||
|                 ) | ||||
|             context[self.countervar] = count | ||||
|             plural, plural_vars = self.render_token_list(self.plural) | ||||
|             if message_context: | ||||
|   | ||||
| @@ -298,6 +298,15 @@ class I18nBlockTransTagTests(SimpleTestCase): | ||||
|         with self.assertRaisesMessage(TemplateSyntaxError, msg): | ||||
|             self.engine.render_to_string('template', {'a': [1, 2, 3]}) | ||||
|  | ||||
|     @setup({'template': ( | ||||
|         '{% load i18n %}{% blocktranslate count counter=num %}{{ counter }}' | ||||
|         '{% plural %}{{ counter }}{% endblocktranslate %}' | ||||
|     )}) | ||||
|     def test_count_not_number(self, tag_name): | ||||
|         msg = "'counter' argument to '{}' tag must be a number.".format(tag_name) | ||||
|         with self.assertRaisesMessage(TemplateSyntaxError, msg): | ||||
|             self.engine.render_to_string('template', {'num': '1'}) | ||||
|  | ||||
|     @setup({'template': ( | ||||
|         '{% load i18n %}{% blocktranslate count count=var|length %}' | ||||
|         'There is {{ count }} object. {% block a %} {% endblock %}' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user