From bc03f1064e10fa247a46d4e8a98ba9b26aa4790d Mon Sep 17 00:00:00 2001 From: antoliny0919 Date: Thu, 22 May 2025 15:56:51 +0900 Subject: Fixed #34041 -- Added aria-current attribute to admin breadcrumbs. Co-authored by: farita1699 --- django/contrib/admin/static/admin/css/base.css | 26 ++++++++++++++++++---- django/contrib/admin/templates/admin/500.html | 8 +++---- .../contrib/admin/templates/admin/app_index.html | 12 +++++----- .../templates/admin/auth/user/change_password.html | 14 ++++++------ django/contrib/admin/templates/admin/base.html | 8 +++---- .../contrib/admin/templates/admin/change_form.html | 12 +++++----- .../contrib/admin/templates/admin/change_list.html | 10 ++++----- .../admin/templates/admin/delete_confirmation.html | 14 ++++++------ .../admin/delete_selected_confirmation.html | 12 +++++----- .../admin/templates/admin/invalid_setup.html | 8 +++---- .../admin/templates/admin/object_history.html | 14 ++++++------ .../admin/templates/registration/logged_out.html | 7 +++++- .../registration/password_change_done.html | 8 +++---- .../registration/password_change_form.html | 8 +++---- .../registration/password_reset_complete.html | 8 +++---- .../registration/password_reset_confirm.html | 8 +++---- .../registration/password_reset_done.html | 8 +++---- .../registration/password_reset_form.html | 8 +++---- .../templates/admin_doc/bookmarklets.html | 10 ++++----- .../admindocs/templates/admin_doc/index.html | 8 +++---- .../templates/admin_doc/missing_docutils.html | 8 +++---- .../templates/admin_doc/model_detail.html | 12 +++++----- .../admindocs/templates/admin_doc/model_index.html | 10 ++++----- .../templates/admin_doc/template_detail.html | 12 +++++----- .../templates/admin_doc/template_filter_index.html | 10 ++++----- .../templates/admin_doc/template_tag_index.html | 10 ++++----- .../admindocs/templates/admin_doc/view_detail.html | 12 +++++----- .../admindocs/templates/admin_doc/view_index.html | 10 ++++----- tests/admin_views/test_nav_sidebar.py | 1 - tests/admin_views/tests.py | 2 +- tests/auth_tests/test_views.py | 8 +++++-- 31 files changed, 166 insertions(+), 140 deletions(-) diff --git a/django/contrib/admin/static/admin/css/base.css b/django/contrib/admin/static/admin/css/base.css index a3ddccdd91..ee67fe7cd5 100644 --- a/django/contrib/admin/static/admin/css/base.css +++ b/django/contrib/admin/static/admin/css/base.css @@ -754,19 +754,37 @@ td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { /* BREADCRUMBS */ -div.breadcrumbs { +ol.breadcrumbs { background: var(--breadcrumbs-bg); padding: 10px 40px; border: none; color: var(--breadcrumbs-fg); - text-align: left; + margin-top: 0; + margin-bottom: 0; +} + +ol.breadcrumbs li { + display: inline-block; + font-size: 0.875rem; + padding: 0; + line-height: 0; +} + +ol.breadcrumbs li:not([aria-current="page"])::after { + content: ' \203A ' / ''; +} + +ol.breadcrumbs li a[aria-current="page"] { + color: var(--breadcrumbs-fg); + text-decoration: none !important; + cursor: default; } -div.breadcrumbs a { +ol.breadcrumbs a { color: var(--breadcrumbs-link-fg); } -div.breadcrumbs a:focus, div.breadcrumbs a:hover { +ol.breadcrumbs a:focus, ol.breadcrumbs a:hover { color: var(--breadcrumbs-fg); } diff --git a/django/contrib/admin/templates/admin/500.html b/django/contrib/admin/templates/admin/500.html index b5ac5c3b6c..61e459356c 100644 --- a/django/contrib/admin/templates/admin/500.html +++ b/django/contrib/admin/templates/admin/500.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Server error (500)' %}{% endblock %} diff --git a/django/contrib/admin/templates/admin/app_index.html b/django/contrib/admin/templates/admin/app_index.html index 727f72b190..ff4188cb66 100644 --- a/django/contrib/admin/templates/admin/app_index.html +++ b/django/contrib/admin/templates/admin/app_index.html @@ -6,13 +6,13 @@ {% if not is_popup %} {% block nav-breadcrumbs %} {% endblock %} {% endif %} diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html index 01c357d8c7..08d191b765 100644 --- a/django/contrib/admin/templates/admin/auth/user/change_password.html +++ b/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -11,13 +11,13 @@ {% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} {% if not is_popup %} {% block breadcrumbs %} - + {% endblock %} {% endif %} {% block content %}
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index ac72935f29..16c1808a0c 100644 --- a/django/contrib/admin/templates/admin/base.html +++ b/django/contrib/admin/templates/admin/base.html @@ -72,10 +72,10 @@ {% block nav-breadcrumbs %} {% endblock %} diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index 8e7ced9a48..f6edffb4d4 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -15,12 +15,12 @@ {% if not is_popup %} {% block breadcrumbs %} - + {% endblock %} {% endif %} diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index b12f8ec583..42e157a85e 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -29,11 +29,11 @@ {% if not is_popup %} {% block breadcrumbs %} - + {% endblock %} {% endif %} diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html index 2ccf719e05..1d04008cc0 100644 --- a/django/contrib/admin/templates/admin/delete_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_confirmation.html @@ -10,13 +10,13 @@ {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/django/contrib/admin/templates/admin/delete_selected_confirmation.html index 2414e79095..c6d0566883 100644 --- a/django/contrib/admin/templates/admin/delete_selected_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_selected_confirmation.html @@ -10,12 +10,12 @@ {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/admin/invalid_setup.html b/django/contrib/admin/templates/admin/invalid_setup.html index 1ef7c71434..ed686f7e30 100644 --- a/django/contrib/admin/templates/admin/invalid_setup.html +++ b/django/contrib/admin/templates/admin/invalid_setup.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/admin/object_history.html b/django/contrib/admin/templates/admin/object_history.html index 40aaecc40a..130232666f 100644 --- a/django/contrib/admin/templates/admin/object_history.html +++ b/django/contrib/admin/templates/admin/object_history.html @@ -2,13 +2,13 @@ {% load i18n admin_urls %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/logged_out.html b/django/contrib/admin/templates/registration/logged_out.html index e9a5545024..759ec734c7 100644 --- a/django/contrib/admin/templates/registration/logged_out.html +++ b/django/contrib/admin/templates/registration/logged_out.html @@ -1,7 +1,12 @@ {% extends "admin/base_site.html" %} {% load i18n %} -{% block breadcrumbs %}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} {% block nav-sidebar %}{% endblock %} diff --git a/django/contrib/admin/templates/registration/password_change_done.html b/django/contrib/admin/templates/registration/password_change_done.html index 784ab37278..e8e019fca9 100644 --- a/django/contrib/admin/templates/registration/password_change_done.html +++ b/django/contrib/admin/templates/registration/password_change_done.html @@ -9,10 +9,10 @@ {% include "admin/color_theme_toggle.html" %} {% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html index 3d66aeb162..d377c201ce 100644 --- a/django/contrib/admin/templates/registration/password_change_form.html +++ b/django/contrib/admin/templates/registration/password_change_form.html @@ -12,10 +12,10 @@ {% include "admin/color_theme_toggle.html" %} {% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %}
diff --git a/django/contrib/admin/templates/registration/password_reset_complete.html b/django/contrib/admin/templates/registration/password_reset_complete.html index e6a383fcfe..1e30fdf4b8 100644 --- a/django/contrib/admin/templates/registration/password_reset_complete.html +++ b/django/contrib/admin/templates/registration/password_reset_complete.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_reset_confirm.html b/django/contrib/admin/templates/registration/password_reset_confirm.html index 5e1478be83..2ad675da24 100644 --- a/django/contrib/admin/templates/registration/password_reset_confirm.html +++ b/django/contrib/admin/templates/registration/password_reset_confirm.html @@ -4,10 +4,10 @@ {% block title %}{% if form.new_password1.errors or form.new_password2.errors %}{% translate "Error:" %} {% endif %}{{ block.super }}{% endblock %} {% block extrastyle %}{{ block.super }}{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_reset_done.html b/django/contrib/admin/templates/registration/password_reset_done.html index 8b1971a76e..194217638f 100644 --- a/django/contrib/admin/templates/registration/password_reset_done.html +++ b/django/contrib/admin/templates/registration/password_reset_done.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admin/templates/registration/password_reset_form.html b/django/contrib/admin/templates/registration/password_reset_form.html index e12189af54..3737414d81 100644 --- a/django/contrib/admin/templates/registration/password_reset_form.html +++ b/django/contrib/admin/templates/registration/password_reset_form.html @@ -4,10 +4,10 @@ {% block title %}{% if form.email.errors %}{% translate "Error:" %} {% endif %}{{ block.super }}{% endblock %} {% block extrastyle %}{{ block.super }}{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block content %} diff --git a/django/contrib/admindocs/templates/admin_doc/bookmarklets.html b/django/contrib/admindocs/templates/admin_doc/bookmarklets.html index 04b329e6e3..598827ef19 100644 --- a/django/contrib/admindocs/templates/admin_doc/bookmarklets.html +++ b/django/contrib/admindocs/templates/admin_doc/bookmarklets.html @@ -2,11 +2,11 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate "Documentation bookmarklets" %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/index.html b/django/contrib/admindocs/templates/admin_doc/index.html index 1b95a210b3..e602255b32 100644 --- a/django/contrib/admindocs/templates/admin_doc/index.html +++ b/django/contrib/admindocs/templates/admin_doc/index.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Documentation' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/missing_docutils.html b/django/contrib/admindocs/templates/admin_doc/missing_docutils.html index 56c063b129..9bbf76f6c2 100644 --- a/django/contrib/admindocs/templates/admin_doc/missing_docutils.html +++ b/django/contrib/admindocs/templates/admin_doc/missing_docutils.html @@ -2,10 +2,10 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Please install docutils' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/model_detail.html b/django/contrib/admindocs/templates/admin_doc/model_detail.html index 1cbde0e44a..6cf05d8f1b 100644 --- a/django/contrib/admindocs/templates/admin_doc/model_detail.html +++ b/django/contrib/admindocs/templates/admin_doc/model_detail.html @@ -10,12 +10,12 @@ {% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% blocktranslate %}Model: {{ name }}{% endblocktranslate %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/model_index.html b/django/contrib/admindocs/templates/admin_doc/model_index.html index b3ecb7ce9c..590cb34b95 100644 --- a/django/contrib/admindocs/templates/admin_doc/model_index.html +++ b/django/contrib/admindocs/templates/admin_doc/model_index.html @@ -4,11 +4,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Models' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_detail.html b/django/contrib/admindocs/templates/admin_doc/template_detail.html index 3dadaa631a..7dae783edb 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_detail.html +++ b/django/contrib/admindocs/templates/admin_doc/template_detail.html @@ -2,12 +2,12 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% blocktranslate %}Template: {{ name }}{% endblocktranslate %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html index c66b7ed3d3..5e9aa2ff9b 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html +++ b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html @@ -3,11 +3,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Template filters' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html index 17b930e337..aa36016dd4 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html +++ b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html @@ -3,11 +3,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Template tags' %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/view_detail.html b/django/contrib/admindocs/templates/admin_doc/view_detail.html index 5a5b47247e..a9dd9a5ecc 100644 --- a/django/contrib/admindocs/templates/admin_doc/view_detail.html +++ b/django/contrib/admindocs/templates/admin_doc/view_detail.html @@ -2,12 +2,12 @@ {% load i18n %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% blocktranslate %}View: {{ name }}{% endblocktranslate %}{% endblock %} diff --git a/django/contrib/admindocs/templates/admin_doc/view_index.html b/django/contrib/admindocs/templates/admin_doc/view_index.html index 873303f2b2..e754fdf587 100644 --- a/django/contrib/admindocs/templates/admin_doc/view_index.html +++ b/django/contrib/admindocs/templates/admin_doc/view_index.html @@ -3,11 +3,11 @@ {% block coltype %}colSM{% endblock %} {% block breadcrumbs %} - + {% endblock %} {% block title %}{% translate 'Views' %}{% endblock %} diff --git a/tests/admin_views/test_nav_sidebar.py b/tests/admin_views/test_nav_sidebar.py index 1875a2f7a1..74fd648ab0 100644 --- a/tests/admin_views/test_nav_sidebar.py +++ b/tests/admin_views/test_nav_sidebar.py @@ -93,7 +93,6 @@ class AdminSidebarTests(TestCase): ) # Does not include aria-current attribute. self.assertContains(response, 'Users' % url) - self.assertNotContains(response, "aria-current") @override_settings(DEBUG=True) def test_included_app_list_template_context_fully_set(self): diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index ad37416cbf..868b616d76 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -2579,7 +2579,7 @@ class AdminViewPermissionsTest(TestCase): # Add user may login and POST to add view, then redirect to admin root self.client.force_login(self.adduser) addpage = self.client.get(reverse("admin:admin_views_article_add")) - change_list_link = '› Articles' % reverse( + change_list_link = 'Articles' % reverse( "admin:admin_views_article_changelist" ) self.assertNotContains( diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index 23dc858ddd..a3863b6233 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -1548,7 +1548,9 @@ class ChangelistTests(MessagesTestMixin, AuthViewsTestCase): ) # Breadcrumb. self.assertContains( - response, f"{self.admin.username}\n› Change password" + response, + f'{self.admin.username}\n
  • ' + "Change password
  • ", ) # Usable password field. self.assertContains( @@ -1648,7 +1650,9 @@ class ChangelistTests(MessagesTestMixin, AuthViewsTestCase): self.assertContains(response, f"

    Set password: {test_user.username}

    ") # Breadcrumb. self.assertContains( - response, f"{test_user.username}\n› Set password" + response, + f'{test_user.username}\n
  • ' + "Set password
  • ", ) # Submit buttons self.assertContains(response, '