Fixed #13765 - 'safe' parameter for urlencode filter
Thanks to KyleMac for the suggestion and SmileyChris for the patch git-svn-id: http://code.djangoproject.com/svn/django/trunk@13849 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
76366aab18
commit
6fb4f6e299
|
@ -291,10 +291,20 @@ def upper(value):
|
||||||
upper.is_safe = False
|
upper.is_safe = False
|
||||||
upper = stringfilter(upper)
|
upper = stringfilter(upper)
|
||||||
|
|
||||||
def urlencode(value):
|
def urlencode(value, safe=None):
|
||||||
"""Escapes a value for use in a URL."""
|
"""
|
||||||
|
Escapes a value for use in a URL.
|
||||||
|
|
||||||
|
Takes an optional ``safe`` parameter used to determine the characters which
|
||||||
|
should not be escaped by Django's ``urlquote`` method. If not provided, the
|
||||||
|
default safe characters will be used (but an empty string can be provided
|
||||||
|
when *all* characters should be escaped).
|
||||||
|
"""
|
||||||
from django.utils.http import urlquote
|
from django.utils.http import urlquote
|
||||||
return urlquote(value)
|
kwargs = {}
|
||||||
|
if safe is not None:
|
||||||
|
kwargs['safe'] = safe
|
||||||
|
return urlquote(value, **kwargs)
|
||||||
urlencode.is_safe = False
|
urlencode.is_safe = False
|
||||||
urlencode = stringfilter(urlencode)
|
urlencode = stringfilter(urlencode)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ def urlquote(url, safe='/'):
|
||||||
can safely be used as part of an argument to a subsequent iri_to_uri() call
|
can safely be used as part of an argument to a subsequent iri_to_uri() call
|
||||||
without double-quoting occurring.
|
without double-quoting occurring.
|
||||||
"""
|
"""
|
||||||
return force_unicode(urllib.quote(smart_str(url), safe))
|
return force_unicode(urllib.quote(smart_str(url), smart_str(safe)))
|
||||||
|
|
||||||
urlquote = allow_lazy(urlquote, unicode)
|
urlquote = allow_lazy(urlquote, unicode)
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ def urlquote_plus(url, safe=''):
|
||||||
returned string can safely be used as part of an argument to a subsequent
|
returned string can safely be used as part of an argument to a subsequent
|
||||||
iri_to_uri() call without double-quoting occurring.
|
iri_to_uri() call without double-quoting occurring.
|
||||||
"""
|
"""
|
||||||
return force_unicode(urllib.quote_plus(smart_str(url), safe))
|
return force_unicode(urllib.quote_plus(smart_str(url), smart_str(safe)))
|
||||||
urlquote_plus = allow_lazy(urlquote_plus, unicode)
|
urlquote_plus = allow_lazy(urlquote_plus, unicode)
|
||||||
|
|
||||||
def urlencode(query, doseq=0):
|
def urlencode(query, doseq=0):
|
||||||
|
|
|
@ -1967,6 +1967,19 @@ For example::
|
||||||
If ``value`` is ``"http://www.example.org/foo?a=b&c=d"``, the output will be
|
If ``value`` is ``"http://www.example.org/foo?a=b&c=d"``, the output will be
|
||||||
``"http%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"``.
|
``"http%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"``.
|
||||||
|
|
||||||
|
.. versionadded:: 1.1
|
||||||
|
|
||||||
|
An optional argument containing the characters which should not be escaped can
|
||||||
|
be provided.
|
||||||
|
|
||||||
|
If not provided, the '/' character is assumed safe. An empty string can be
|
||||||
|
provided when *all* characters should be escaped. For example::
|
||||||
|
|
||||||
|
{{ value|urlencode:"" }}
|
||||||
|
|
||||||
|
If ``value`` is ``"http://www.example.org/"``, the output will be
|
||||||
|
``"http%3A%2F%2Fwww.example.org%2F"``.
|
||||||
|
|
||||||
.. templatefilter:: urlize
|
.. templatefilter:: urlize
|
||||||
|
|
||||||
urlize
|
urlize
|
||||||
|
|
|
@ -265,6 +265,10 @@ def get_filter_tests():
|
||||||
'filter-iriencode03': ('{{ url|iriencode }}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'),
|
'filter-iriencode03': ('{{ url|iriencode }}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'),
|
||||||
'filter-iriencode04': ('{% autoescape off %}{{ url|iriencode }}{% endautoescape %}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'),
|
'filter-iriencode04': ('{% autoescape off %}{{ url|iriencode }}{% endautoescape %}', {'url': mark_safe('?test=1&me=2')}, '?test=1&me=2'),
|
||||||
|
|
||||||
|
# urlencode
|
||||||
|
'filter-urlencode01': ('{{ url|urlencode }}', {'url': '/test&"/me?/'}, '/test%26%22/me%3F/'),
|
||||||
|
'filter-urlencode02': ('/test/{{ urlbit|urlencode:"" }}/', {'urlbit': 'escape/slash'}, '/test/escape%2Fslash/'),
|
||||||
|
|
||||||
# Chaining a bunch of safeness-preserving filters should not alter
|
# Chaining a bunch of safeness-preserving filters should not alter
|
||||||
# the safe status either way.
|
# the safe status either way.
|
||||||
'chaining01': ('{{ a|capfirst|center:"7" }}.{{ b|capfirst|center:"7" }}', {"a": "a < b", "b": mark_safe("a < b")}, " A < b . A < b "),
|
'chaining01': ('{{ a|capfirst|center:"7" }}.{{ b|capfirst|center:"7" }}', {"a": "a < b", "b": mark_safe("a < b")}, " A < b . A < b "),
|
||||||
|
|
Loading…
Reference in New Issue