From 357365a64e1c756eabaaf0ee0404df87c15c6e9b Mon Sep 17 00:00:00 2001 From: lstaana <lemuel.staana@antematix.ca> Date: Sun, 24 Sep 2023 21:16:56 -0400 Subject: [PATCH] Fixed #34835 -- Made admin's changelist filters render in <nav> tag. --- AUTHORS | 1 + .../contrib/admin/templates/admin/change_list.html | 6 +++--- docs/releases/5.1.txt | 3 ++- tests/admin_views/tests.py | 12 +++++++++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/AUTHORS b/AUTHORS index ae2bdaf393..a25695e40d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -589,6 +589,7 @@ answer newbie questions, and generally made Django that much better: Leandra Finger <leandra.finger@gmail.com> Lee Reilly <lee@leereilly.net> Lee Sanghyuck <shlee322@elab.kr> + Lemuel Sta Ana <https://github.com/lstaana> Leo "hylje" Honkanen <sealage@gmail.com> Leo Shklovskii Leo Soto <leo.soto@gmail.com> diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index e03e705df2..310872b015 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -73,8 +73,8 @@ </div> {% block filters %} {% if cl.has_filters %} - <div id="changelist-filter"> - <h2>{% translate 'Filter' %}</h2> + <nav id="changelist-filter" aria-labelledby="changelist-filter-header"> + <h2 id="changelist-filter-header">{% translate 'Filter' %}</h2> {% if cl.is_facets_optional or cl.has_active_filters %}<div id="changelist-filter-extra-actions"> {% if cl.is_facets_optional %}<h3> {% if cl.add_facets %}<a href="{{ cl.remove_facet_link }}" class="hidelink">{% translate "Hide counts" %}</a> @@ -85,7 +85,7 @@ </h3>{% endif %} </div>{% endif %} {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %} - </div> + </nav> {% endif %} {% endblock %} </div> diff --git a/docs/releases/5.1.txt b/docs/releases/5.1.txt index 5d8e9b6993..12e3c80ee2 100644 --- a/docs/releases/5.1.txt +++ b/docs/releases/5.1.txt @@ -248,7 +248,8 @@ PostgreSQL 13 and higher. Miscellaneous ------------- -* ... +* In order to improve accessibility, the admin's changelist filter is now + rendered in a ``<nav>`` tag instead of a ``<div>``. .. _deprecated-features-5.1: diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 4ea261b347..b2a5fe2ccd 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -812,7 +812,7 @@ class AdminViewBasicTest(AdminViewBasicTestCase): response = self.client.get(reverse("admin:admin_views_thing_changelist")) self.assertContains( response, - '<div id="changelist-filter">', + '<nav id="changelist-filter" aria-labelledby="changelist-filter-header">', msg_prefix="Expected filter not found in changelist view", ) self.assertNotContains( @@ -865,7 +865,10 @@ class AdminViewBasicTest(AdminViewBasicTestCase): def test_relation_spanning_filters(self): changelist_url = reverse("admin:admin_views_chapterxtra1_changelist") response = self.client.get(changelist_url) - self.assertContains(response, '<div id="changelist-filter">') + self.assertContains( + response, + '<nav id="changelist-filter" aria-labelledby="changelist-filter-header">', + ) filters = { "chap__id__exact": { "values": [c.id for c in Chapter.objects.all()], @@ -1002,7 +1005,10 @@ class AdminViewBasicTest(AdminViewBasicTestCase): "Changelist filter isn't showing options contained inside a model " "field 'choices' option named group." ) - self.assertContains(response, '<div id="changelist-filter">') + self.assertContains( + response, + '<nav id="changelist-filter" aria-labelledby="changelist-filter-header">', + ) self.assertContains( response, '<a href="?surface__exact=x">Horizontal</a>',