mirror of https://github.com/django/django.git
Fix #20022: Correctly handle prefixes with url-unsafe characters in reverse().
This commit is contained in:
parent
5d8342f321
commit
4fa7f3cdd9
|
@ -388,7 +388,7 @@ class RegexURLResolver(LocaleRegexProvider):
|
||||||
if len(args) != len(params) + len(prefix_args):
|
if len(args) != len(params) + len(prefix_args):
|
||||||
continue
|
continue
|
||||||
unicode_args = [force_text(val) for val in args]
|
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:
|
else:
|
||||||
if set(kwargs.keys()) | set(defaults.keys()) != set(params) | set(defaults.keys()) | set(prefix_args):
|
if set(kwargs.keys()) | set(defaults.keys()) != set(params) | set(defaults.keys()) | set(prefix_args):
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -183,6 +183,11 @@ class URLPatternReverse(TestCase):
|
||||||
self.assertEqual('/bump%2520map/includes/non_path_include/',
|
self.assertEqual('/bump%2520map/includes/non_path_include/',
|
||||||
reverse('non_path_include', prefix='/bump%20map/'))
|
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):
|
class ResolverTests(unittest.TestCase):
|
||||||
def test_resolver_repr(self):
|
def test_resolver_repr(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue