summaryrefslogtreecommitdiff
path: root/django/http
diff options
context:
space:
mode:
authorChris Beaven <smileychris@gmail.com>2010-12-01 22:25:17 +0000
committerChris Beaven <smileychris@gmail.com>2010-12-01 22:25:17 +0000
commitdceaa82dec9f97ac77754dfdc737852d8171c8a2 (patch)
treef24cbd8cf821e5b0990d02d541d0ce42c2976a8a /django/http
parentcd847db17fbb578c580c54ac41dcb899ef3b9cb0 (diff)
Fixed #14809 -- broken login related tests after r14733.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14764 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/http')
-rw-r--r--django/http/__init__.py25
1 files changed, 22 insertions, 3 deletions
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 42027f0beb..90c55c6319 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -3,7 +3,7 @@ import os
import re
import time
from pprint import pformat
-from urllib import urlencode
+from urllib import urlencode, quote
from urlparse import urljoin
try:
from cStringIO import StringIO
@@ -363,11 +363,30 @@ class QueryDict(MultiValueDict):
"""Returns a mutable copy of this object."""
return self.__deepcopy__({})
- def urlencode(self):
+ def urlencode(self, safe=None):
+ """
+ Returns an encoded string of all query string arguments.
+
+ :arg safe: Used to specify characters which do not require quoting, for
+ example::
+
+ >>> q = QueryDict('', mutable=True)
+ >>> q['next'] = '/a&b/'
+ >>> q.urlencode()
+ 'next=%2Fa%26b%2F'
+ >>> q.urlencode(safe='/')
+ 'next=/a%26b/'
+
+ """
output = []
+ if safe:
+ encode = lambda k, v: '%s=%s' % ((quote(k, safe), quote(v, safe)))
+ else:
+ encode = lambda k, v: urlencode({k: v})
for k, list_ in self.lists():
k = smart_str(k, self.encoding)
- output.extend([urlencode({k: smart_str(v, self.encoding)}) for v in list_])
+ output.extend([encode(k, smart_str(v, self.encoding))
+ for v in list_])
return '&'.join(output)
class CompatCookie(SimpleCookie):