mirror of https://github.com/django/django.git
Fixed #18995 -- Made blocktranslate tag raise TemplateSyntaxError when plural count is not a number.
This commit is contained in:
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 %}'
|
||||
|
|
Loading…
Reference in New Issue