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.conf import settings
|
||||||
from django.template import Library, Node, TemplateSyntaxError, Variable
|
from django.template import Library, Node, TemplateSyntaxError, Variable
|
||||||
from django.template.base import TokenType, render_value_in_context
|
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)
|
singular, vars = self.render_token_list(self.singular)
|
||||||
if self.plural and self.countervar and self.counter:
|
if self.plural and self.countervar and self.counter:
|
||||||
count = self.counter.resolve(context)
|
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
|
context[self.countervar] = count
|
||||||
plural, plural_vars = self.render_token_list(self.plural)
|
plural, plural_vars = self.render_token_list(self.plural)
|
||||||
if message_context:
|
if message_context:
|
||||||
|
|
|
@ -298,6 +298,15 @@ class I18nBlockTransTagTests(SimpleTestCase):
|
||||||
with self.assertRaisesMessage(TemplateSyntaxError, msg):
|
with self.assertRaisesMessage(TemplateSyntaxError, msg):
|
||||||
self.engine.render_to_string('template', {'a': [1, 2, 3]})
|
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': (
|
@setup({'template': (
|
||||||
'{% load i18n %}{% blocktranslate count count=var|length %}'
|
'{% load i18n %}{% blocktranslate count count=var|length %}'
|
||||||
'There is {{ count }} object. {% block a %} {% endblock %}'
|
'There is {{ count }} object. {% block a %} {% endblock %}'
|
||||||
|
|
Loading…
Reference in New Issue