Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #900 from bmispelon/ticket-20022

Fix #20022: Correctly handle prefixes with url-unsafe characters in reverse()
  • Loading branch information...
commit e4d9f8aed11e964885cd77f8abd01ba0dfa4aa13 2 parents 5d8342f + 4fa7f3c
@jacobian jacobian authored
View
2  django/core/urlresolvers.py
@@ -388,7 +388,7 @@ def _reverse_with_prefix(self, lookup_view, _prefix, *args, **kwargs):
if len(args) != len(params) + len(prefix_args):
continue
unicode_args = [force_text(val) for val in args]
- candidate = (prefix_norm + result) % dict(zip(prefix_args + params, unicode_args))
+ candidate = (prefix_norm.replace('%', '%%') + result) % dict(zip(prefix_args + params, unicode_args))
else:
if set(kwargs.keys()) | set(defaults.keys()) != set(params) | set(defaults.keys()) | set(prefix_args):
continue
View
5 tests/urlpatterns_reverse/tests.py
@@ -183,6 +183,11 @@ def test_prefix_format_char(self):
self.assertEqual('/bump%2520map/includes/non_path_include/',
reverse('non_path_include', prefix='/bump%20map/'))
+ def test_non_urlsafe_prefix_with_args(self):
+ # Regression for #20022
+ self.assertEqual('/%7Eme/places/1/',
+ reverse('places', args=[1], prefix='/~me/'))
+
class ResolverTests(unittest.TestCase):
def test_resolver_repr(self):
"""
Please sign in to comment.
Something went wrong with that request. Please try again.