misc: add a |decimal template tag (#27699)

This commit is contained in:
Frédéric Péters 2018-10-31 12:06:20 +01:00
parent 59886501f8
commit 9e2226a713
2 changed files with 28 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import pytest
from quixote import cleanup
from qommon.template import Template, TemplateError
from wcs.conditions import Condition
from utilities import create_temporary_pub, clean_temporary_pub
@ -141,3 +142,17 @@ def test_datetime_templatetags():
def test_variable_unicode_error_handling():
tmpl = Template('{{ form_var_éléphant }}')
assert tmpl.render() == ''
def test_decimal_templatetag():
tmpl = Template('{{ plop|decimal }}')
assert tmpl.render({'plop': 'toto'}) == ''
assert tmpl.render({'plop': '3.14'}) == '3.14'
assert tmpl.render({'plop': '3,14'}) == '3.14'
assert tmpl.render({'plop': 3.14}) == '3.14'
assert tmpl.render({'plop': 12345.678}) == '12345.678'
assert tmpl.render({'plop': None}) == ''
tmpl = Template('{% if plop|decimal > 2 %}hello{% endif %}')
assert tmpl.render({'plop': 3}) == 'hello'
assert tmpl.render({'plop': 1}) == ''
assert tmpl.render({'plop': None}) == 'hello' # will be str > int, always True.

View File

@ -15,6 +15,7 @@
# along with this program; if not, see <http://www.gnu.org/licenses/>.
import datetime
from decimal import Decimal
from django import template
from django.template import defaultfilters
@ -75,6 +76,18 @@ def date(value, arg=None):
value = parse_date(value)
return defaultfilters.date(value, arg=arg)
@register.filter(is_safe=True)
def decimal(value):
if not value:
return ''
try:
if isinstance(value, basestring):
# replace , by . for French users comfort
value = value.replace(',', '.')
return Decimal(value).quantize(Decimal('1.0000')).normalize()
except ArithmeticError:
return ''
@register.simple_tag
def standard_text(text_id):
return mark_safe(TextsDirectory.get_html_text(str(text_id)))