#35816: Django Template Language doesn't support all float literals
----------------------------+-----------------------------------------
Reporter: Lily Foote | Type: Uncategorized
Status: new | Component: Uncategorized
Version: 5.0 | Severity: Normal
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
----------------------------+-----------------------------------------
When parsing arguments to filters, Django converts numeric literals to
`float` or `int`, but in the case of scientific notation for `float` this
is incomplete:
{{{
>>> from django.template.base import Template
>>> from django.template.engine import Engine
>>> 5.2e3
5200.0
>>> Template("{{ foo|default:5.2e3 }}", engine=e)
<Template template_string="{{ foo|default:5.2e3...">
>>> 5.2e-3
0.0052
>>> Template("{{ foo|default:5.2e-3 }}", engine=e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lily/.local/share/lilyenv/virtualenvs/django-rusty-
templates/3.12/lib/python3.12/site-packages/django/template/base.py", line
154, in __init__
self.nodelist = self.compile_nodelist()
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/lily/.local/share/lilyenv/virtualenvs/django-rusty-
templates/3.12/lib/python3.12/site-packages/django/template/base.py", line
196, in compile_nodelist
nodelist = parser.parse()
^^^^^^^^^^^^^^
File "/home/lily/.local/share/lilyenv/virtualenvs/django-rusty-
templates/3.12/lib/python3.12/site-packages/django/template/base.py", line
489, in parse
raise self.error(token, e)
File "/home/lily/.local/share/lilyenv/virtualenvs/django-rusty-
templates/3.12/lib/python3.12/site-packages/django/template/base.py", line
487, in parse
filter_expression = self.compile_filter(token.contents)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/lily/.local/share/lilyenv/virtualenvs/django-rusty-
templates/3.12/lib/python3.12/site-packages/django/template/base.py", line
605, in compile_filter
return FilterExpression(token, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/lily/.local/share/lilyenv/virtualenvs/django-rusty-
templates/3.12/lib/python3.12/site-packages/django/template/base.py", line
706, in __init__
raise TemplateSyntaxError(
django.template.exceptions.TemplateSyntaxError: Could not parse the
remainder: '-3' from 'foo|default:5.2e-3'
}}}
I couldn't actually find the documentation for Django's handling of
numeric literals in templates, so this may be an undocumented
implementation detail. If so, perhaps deprecating scientific notation
would be appropriate. Otherwise, we should support this case.
--
Ticket URL: <https://code.djangoproject.com/ticket/35816>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/010701926220b1bb-fbd2e9b1-3187-4b31-8ed5-ca3a464ee664-000000%40eu-central-1.amazonses.com.