#20423 closed Cleanup/optimization (fixed)
Template renderer does not parse numeric variables
Reported by: | Owned by: | Tim McCurrach | |
---|---|---|---|
Component: | Documentation | Version: | dev |
Severity: | Normal | Keywords: | number variable |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Currently a Variable is defined, according to the django template manual, as :
Variable names consist of any combination of alphanumeric characters and the underscore ("_").
If a variable is composed of numbers only, it will not get its context data correctly, coming across as an int. This patch assigns the appropriate context data to the Variable class when it encounters an integer.
Here's the current behavior:
from django.template.base import Template
from django.template.base import Context
t = Template("{{ 123 }}")
t.render(Context())
u'123'
t = Template("{{ foo }}")
t.render(Context({"foo":"bar"}))
u'bar'
Attachments (1)
Change History (15)
by , 12 years ago
Attachment: | number_templating.diff added |
---|
comment:1 by , 12 years ago
Definitely not full fix, it does cause regressions elsewhere - namely the view loading a changelist in the Admin.
comment:2 by , 12 years ago
The issue is valid but IMHO the code should be fixed to disallow such uses of number variables and the documentation fixed accordingly (e.g Variable name can't start with an integer).
I know this might be backward incompatible but I can't see any valid use case for this behavior, looks more like a side effect/oversight of the access by index feature. Am I missing something here?
comment:3 by , 12 years ago
Patch needs improvement: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:4 by , 12 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:5 by , 12 years ago
I totally agree with charettes that there may not be an use case for this. Hence, I'd propose to add warning first and then raise an exceptions if integer or float variable names are used. Does it makes sense?
comment:7 by , 4 years ago
Has patch: | unset |
---|---|
Owner: | removed |
Patch needs improvement: | unset |
Status: | assigned → new |
comment:8 by , 4 years ago
Owner: | set to |
---|---|
Status: | new → assigned |
I have created a PR to update the docs. Given it will now be documented, adding in any checks or warnings seems like overkill to me.
comment:10 by , 4 years ago
Component: | Template system → Documentation |
---|---|
Type: | Bug → Cleanup/optimization |
comment:11 by , 4 years ago
Patch needs improvement: | set |
---|
comment:14 by , 4 years ago
Patch needs improvement: | unset |
---|
Patch to assign context to numeric Variables in Django templating