summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authora8568730 <a8568730@hotmail.com>2018-02-08 10:21:10 +0100
committerTim Graham <timograham@gmail.com>2018-02-23 15:40:11 -0500
commitba37ee9ef882deb8e917f1cae0c586a0a275e731 (patch)
treeeecea6732bca2795f6b17496a972bae516cc6e2f
parent7905815510fb1eae99010ccc0039249d981a121c (diff)
Fixed #28635 -- Fixed admin's preserved filters if the URL contains non-ASCII characters.
-rw-r--r--django/contrib/admin/templatetags/admin_urls.py4
-rw-r--r--tests/admin_views/tests.py21
2 files changed, 10 insertions, 15 deletions
diff --git a/django/contrib/admin/templatetags/admin_urls.py b/django/contrib/admin/templatetags/admin_urls.py
index b926fe447a..f817c254eb 100644
--- a/django/contrib/admin/templatetags/admin_urls.py
+++ b/django/contrib/admin/templatetags/admin_urls.py
@@ -1,4 +1,4 @@
-from urllib.parse import parse_qsl, urlparse, urlunparse
+from urllib.parse import parse_qsl, unquote, urlparse, urlunparse
from django import template
from django.contrib.admin.utils import quote
@@ -30,7 +30,7 @@ def add_preserved_filters(context, url, popup=False, to_field=None):
if opts and preserved_filters:
preserved_filters = dict(parse_qsl(preserved_filters))
- match_url = '/%s' % url.partition(get_script_prefix())[2]
+ match_url = '/%s' % unquote(url).partition(get_script_prefix())[2]
try:
match = resolve(match_url)
except Resolver404:
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 8cdaa2c9a8..011bb2897a 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -5641,19 +5641,14 @@ class AdminKeepChangeListFiltersTests(TestCase):
'preserved_filters': self.get_preserved_filters_querystring(),
'opts': User._meta,
}
-
- url = reverse('admin:auth_user_changelist', current_app=self.admin_site.name)
- self.assertURLEqual(
- self.get_changelist_url(),
- add_preserved_filters(context, url),
- )
-
- with override_script_prefix('/prefix/'):
- url = reverse('admin:auth_user_changelist', current_app=self.admin_site.name)
- self.assertURLEqual(
- self.get_changelist_url(),
- add_preserved_filters(context, url),
- )
+ prefixes = ('', '/prefix/', '/後台/')
+ for prefix in prefixes:
+ with self.subTest(prefix=prefix), override_script_prefix(prefix):
+ url = reverse('admin:auth_user_changelist', current_app=self.admin_site.name)
+ self.assertURLEqual(
+ self.get_changelist_url(),
+ add_preserved_filters(context, url),
+ )
class NamespacedAdminKeepChangeListFiltersTests(AdminKeepChangeListFiltersTests):