#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 , 20 years ago
| Summary: | Change {% ifnotequal %} tag to accept hard-coded strings → [patch] Change {% ifnotequal %} tag to accept hard-coded strings |
|---|
comment:2 by , 20 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 , 20 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Fixed in [587].