diff options
| author | Jacob Walls <jacobtylerwalls@gmail.com> | 2020-09-26 15:03:13 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-09-29 08:03:51 +0200 |
| commit | 01a7af09b9d61aa66f5bf345fc32cc8f90ecb62a (patch) | |
| tree | 47c31ccdf1d1c51d3a92fa229ef646840cabdc4d | |
| parent | 848770dd2c5dec6c805d67f470eb936f38b9421d (diff) | |
Fixed #18995 -- Made blocktranslate tag raise TemplateSyntaxError when plural count is not a number.
| -rw-r--r-- | django/templatetags/i18n.py | 7 | ||||
| -rw-r--r-- | tests/template_tests/syntax_tests/i18n/test_blocktranslate.py | 9 |
2 files changed, 16 insertions, 0 deletions
diff --git a/django/templatetags/i18n.py b/django/templatetags/i18n.py index d0fda0797e..93023f3109 100644 --- a/django/templatetags/i18n.py +++ b/django/templatetags/i18n.py @@ -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: diff --git a/tests/template_tests/syntax_tests/i18n/test_blocktranslate.py b/tests/template_tests/syntax_tests/i18n/test_blocktranslate.py index 8edacd87e2..5079824b30 100644 --- a/tests/template_tests/syntax_tests/i18n/test_blocktranslate.py +++ b/tests/template_tests/syntax_tests/i18n/test_blocktranslate.py @@ -299,6 +299,15 @@ class I18nBlockTransTagTests(SimpleTestCase): 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 %}' '{% endblocktranslate %}' |
