Opened 17 years ago
Closed 15 years ago
#5971 closed (fixed)
django.template.TokenParser inconsistent with parsing filters
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Template system | Version: | dev |
Severity: | Keywords: | template filter | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
django.template.TokenParser is inconsistent
when parsing filters that follow constant strings or variables.
Meaning that:
{% tag thevar|filter sometag %}
will produce:
self.value() = "thevar|filter" self.tag() = "sometag"
However:
{% tag "a value"|filter sometag %}
will produce:
self.value() = "a value" self.tag() = "|filter" self.tag() = "sometag"
This does not seem like correct behaviour...
I made a very simple patch for this, thus the outcome of the above:
{% tag "a value"|filter sometag %}
will produce:
value = "a value"|filter tag = sometag
So now we can simply pass the "value" into a FilterExpression to parse the filters...
PS: I had trouble naming an internal method, feel free to complain about the name ;)
Attachments (4)
Change History (9)
by , 17 years ago
Attachment: | tokenparser_filter_fix.diff added |
---|
comment:1 by , 17 years ago
django.template.TokenParser is inconsistent when parsing filters that follow constant strings or variables.
Meaning that {% tag thevar|filter sometag %} will produce:
self.value() = "thevar|filter" self.tag() = "sometag"
However {% tag "a value"|filter sometag %} will produce:
self.value() = "a value" self.tag() = "|filter" self.tag() = "sometag"
This does not seem like correct behaviour... I made a very simple patch for this, thus the outcome of the above:
{% tag "a value"|filter sometag %} will produce: self.value() = "a value"|filter self.tag() = sometag
So now we can simply pass the "value" into a FilterExpression? to parse the filters...
See this thread:
http://groups.google.com/group/django-developers/browse_thread/thread/c90b6e29d20724ca
PS: I should learn to use the preview button.
PPS: The self is from the perspective of the implementee of the TokenParser class.
comment:2 by , 17 years ago
Description: | modified (diff) |
---|---|
Triage Stage: | Unreviewed → Accepted |
Fixed description formatting.
comment:3 by , 17 years ago
Needs tests: | set |
---|
by , 16 years ago
Attachment: | tests_for_5971.diff added |
---|
by , 16 years ago
Attachment: | 5971-tokenparser-consistency-r10001.diff added |
---|
Unified and updated patches (implementation bt Dmitri Fedortchenko and tests by adamv)
by , 16 years ago
Attachment: | 5971-parser_consistency_literals_and_filters-r10246.diff added |
---|
Patch updated to port r10118
comment:4 by , 16 years ago
Needs tests: | unset |
---|
I've update the patch to expand regressiontests/template/parser.py
(added in r10118) rather than adding a regressiontests/tokenparser/
subdir.
While at it, also made sure the variable_parsing
doctests get executed, they had been added in that revision but weren't being run.
comment:5 by , 15 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
The patch