summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2010-02-21 23:42:57 +0000
committerJannis Leidel <jannis@leidel.info>2010-02-21 23:42:57 +0000
commitb459f5b7e3be65bbd554e03626ff255d4a68e9fc (patch)
tree51a6e3793762e7f805cd7ab5532937d480eaea3a /django
parenta88cbc141d544ba437545a8470282e16ddc1d3e3 (diff)
Fixed #5971 - Fixed inconsistent behaviour of the TokenParser when parsing filters that follow constant strings or variables. Thanks Dmitri Fedortchenko, Adam Vandenberg and Ramiro Morales.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12471 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/template/__init__.py28
1 files changed, 19 insertions, 9 deletions
diff --git a/django/template/__init__.py b/django/template/__init__.py
index 584b14b06f..eba2429928 100644
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -421,6 +421,20 @@ class TokenParser(object):
"A microparser that parses for a value: some string constant or variable name."
subject = self.subject
i = self.pointer
+
+ def next_space_index(subject, i):
+ "Increment pointer until a real space (i.e. a space not within quotes) is encountered"
+ while i < len(subject) and subject[i] not in (' ', '\t'):
+ if subject[i] in ('"', "'"):
+ c = subject[i]
+ i += 1
+ while i < len(subject) and subject[i] != c:
+ i += 1
+ if i >= len(subject):
+ raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
+ i += 1
+ return i
+
if i >= len(subject):
raise TemplateSyntaxError("Searching for value. Expected another value but found end of string: %s" % subject)
if subject[i] in ('"', "'"):
@@ -431,6 +445,10 @@ class TokenParser(object):
if i >= len(subject):
raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
i += 1
+
+ # Continue parsing until next "real" space, so that filters are also included
+ i = next_space_index(subject, i)
+
res = subject[p:i]
while i < len(subject) and subject[i] in (' ', '\t'):
i += 1
@@ -439,15 +457,7 @@ class TokenParser(object):
return res
else:
p = i
- while i < len(subject) and subject[i] not in (' ', '\t'):
- if subject[i] in ('"', "'"):
- c = subject[i]
- i += 1
- while i < len(subject) and subject[i] != c:
- i += 1
- if i >= len(subject):
- raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
- i += 1
+ i = next_space_index(subject, i)
s = subject[p:i]
while i < len(subject) and subject[i] in (' ', '\t'):
i += 1