Commit 4fa7f3cd authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

Fix #20022: Correctly handle prefixes with url-unsafe characters in reverse().

parent 5d8342f3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ class RegexURLResolver(LocaleRegexProvider):
                    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
+5 −0
Original line number Diff line number Diff line
@@ -183,6 +183,11 @@ class URLPatternReverse(TestCase):
        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):
        """