#365 closed defect (fixed)
[patch] Change template.resolve_variable() to resolve hard-coded strings
Reported by: | Owned by: | Adrian Holovaty | |
---|---|---|---|
Component: | Template system | Version: | |
Severity: | minor | Keywords: | tag ifnotequal |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Change {% ifnotequal %} tag to accept hard-coded strings.
i.e.
{% ifnotequal app.name 'Core' %}
...
{% endifnotequal %}
The following patch basically just adds:
if path[0]==path[-1] and path[0] in ['"', "'"]: return path[1:-1]
but using a wrapping conditional instead of seperate returns.
Index: template.py =================================================================== --- template.py (revision 532) +++ template.py (working copy) @@ -369,30 +369,33 @@ (The example assumes VARIABLE_ATTRIBUTE_SEPARATOR is '.') """ - current = context - bits = path.split(VARIABLE_ATTRIBUTE_SEPARATOR) - while bits: - try: # dictionary lookup - current = current[bits[0]] - except (TypeError, AttributeError, KeyError): - try: # attribute lookup - current = getattr(current, bits[0]) - if callable(current): - if getattr(current, 'alters_data', False): - current = '' - else: - try: # method call (assuming no args required) - current = current() - except SilentVariableFailure: + if path[0]==path[-1] and path[0] in ['"', "'"]: #it's a hard-coded string + current = path[1:-1] + else: + current = context + bits = path.split(VARIABLE_ATTRIBUTE_SEPARATOR) + while bits: + try: # dictionary lookup + current = current[bits[0]] + except (TypeError, AttributeError, KeyError): + try: # attribute lookup + current = getattr(current, bits[0]) + if callable(current): + if getattr(current, 'alters_data', False): current = '' - except TypeError: # arguments *were* required - current = '' # invalid method call - except (TypeError, AttributeError): - try: # list-index lookup - current = current[int(bits[0])] - except (IndexError, ValueError, KeyError): - raise VariableDoesNotExist, "Failed lookup for key [%s] in %r" % (bits[0], current) # missing attribute - del bits[0] + else: + try: # method call (assuming no args required) + current = current() + except SilentVariableFailure: + current = '' + except TypeError: # arguments *were* required + current = '' # invalid method call + except (TypeError, AttributeError): + try: # list-index lookup + current = current[int(bits[0])] + except (IndexError, ValueError, KeyError): + raise VariableDoesNotExist, "Failed lookup for key [%s] in %r" % (bits[0], current) # missing attribute + del bits[0] return current def resolve_variable_with_filters(var_string, context):
Change History (3)
comment:1 by , 19 years ago
Summary: | Change {% ifnotequal %} tag to accept hard-coded strings → [patch] Change {% ifnotequal %} tag to accept hard-coded strings |
---|
comment:2 by , 19 years ago
Summary: | [patch] Change {% ifnotequal %} tag to accept hard-coded strings → [patch] Change template.resolve_variable() to resolve hard-coded strings |
---|
comment:3 by , 19 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Fixed in [587].