From 35dab0ad9ee2ed23101420cb0f253deda2818191 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 27 Jan 2026 13:32:59 -0500 Subject: Fixed #36887 -- Improved admin changelist layout for object-tools button. --- django/contrib/admin/static/admin/css/base.css | 15 +++++++++++---- .../contrib/admin/static/admin/css/responsive.css | 10 +++++++--- .../admin/static/admin/css/responsive_rtl.css | 4 ---- django/contrib/admin/static/admin/css/rtl.css | 4 ---- django/contrib/admin/templates/admin/base.html | 12 ++++++++---- .../contrib/admin/templates/admin/change_form.html | 3 ++- .../contrib/admin/templates/admin/change_list.html | 15 ++++++++------- docs/intro/_images/admin04t.png | Bin 15538 -> 22785 bytes docs/intro/_images/admin05t.png | Bin 43712 -> 43310 bytes docs/intro/_images/admin07t.png | Bin 0 -> 17552 bytes docs/intro/_images/admin08t.png | Bin 19985 -> 20085 bytes docs/intro/_images/admin12t.png | Bin 24331 -> 32638 bytes docs/intro/_images/admin13t.png | Bin 41136 -> 42927 bytes docs/ref/contrib/admin/_images/list_filter.png | Bin 55201 -> 60208 bytes docs/releases/6.1.txt | 2 ++ 15 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 docs/intro/_images/admin07t.png diff --git a/django/contrib/admin/static/admin/css/base.css b/django/contrib/admin/static/admin/css/base.css index ea7707eb89..dc6e24a476 100644 --- a/django/contrib/admin/static/admin/css/base.css +++ b/django/contrib/admin/static/admin/css/base.css @@ -808,18 +808,25 @@ a.deletelink:focus, a.deletelink:hover { text-decoration: none; } +/* TITLES */ + +.titles-and-tools { + display: flex; +} + +.titles { + flex-grow: 1; +} + /* OBJECT TOOLS */ .object-tools { padding: 0; - overflow: hidden; - text-align: right; - margin: 0 0 15px; + margin: 0; } .object-tools li { display: inline-block; - height: auto; } .object-tools li + li { diff --git a/django/contrib/admin/static/admin/css/responsive.css b/django/contrib/admin/static/admin/css/responsive.css index c8af03ba90..9524cc5263 100644 --- a/django/contrib/admin/static/admin/css/responsive.css +++ b/django/contrib/admin/static/admin/css/responsive.css @@ -439,11 +439,15 @@ input[type="submit"], button { margin-top: 30px; } - .object-tools { - text-align: left; + /* Forms */ + + .titles-and-tools { + flex-direction: column; } - /* Forms */ + .object-tools { + margin-bottom: 10px; + } .form-row { padding: 15px 0; diff --git a/django/contrib/admin/static/admin/css/responsive_rtl.css b/django/contrib/admin/static/admin/css/responsive_rtl.css index cd32867688..34a3462b6c 100644 --- a/django/contrib/admin/static/admin/css/responsive_rtl.css +++ b/django/contrib/admin/static/admin/css/responsive_rtl.css @@ -53,10 +53,6 @@ margin-right: 0; } - [dir="rtl"] .object-tools { - text-align: right; - } - [dir="rtl"] .aligned .vCheckboxLabel { padding: 1px 5px 0 0; } diff --git a/django/contrib/admin/static/admin/css/rtl.css b/django/contrib/admin/static/admin/css/rtl.css index aa7c4e8636..4726aceb9c 100644 --- a/django/contrib/admin/static/admin/css/rtl.css +++ b/django/contrib/admin/static/admin/css/rtl.css @@ -25,10 +25,6 @@ th { background-position: 100% 1px; } -.object-tools { - text-align: left; -} - .object-tools li + li { margin-right: 15px; margin-left: 0; diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index 73121e5114..066f5fa65c 100644 --- a/django/contrib/admin/templates/admin/base.html +++ b/django/contrib/admin/templates/admin/base.html @@ -98,11 +98,15 @@ {% endblock messages %}
- {% block pretitle %}{% endblock %} - {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} - {% block content_subtitle %}{% if subtitle %}

{{ subtitle }}

{% endif %}{% endblock %} - {% block content %} +
+
+ {% block pretitle %}{% endblock %} + {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} + {% block content_subtitle %}{% if subtitle %}

{{ subtitle }}

{% endif %}{% endblock %} +
{% block object-tools %}{% endblock %} +
+ {% block content %} {{ content }} {% endblock %} {% block sidebar %}{% endblock %} diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index 2e06fab63f..9b09fb9952 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -24,7 +24,6 @@ {% endblock %} {% endif %} -{% block content %}
{% block object-tools %} {% if change and not is_popup %}
    @@ -34,6 +33,8 @@
{% endif %} {% endblock %} + +{% block content %}
{% csrf_token %}{% block form_top %}{% endblock %}
{% if is_popup %}{% endif %} diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index 42e157a85e..78eef88294 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -39,15 +39,16 @@ {% block coltype %}{% endblock %} +{% block object-tools %} +
    + {% block object-tools-items %} + {% change_list_object_tools %} + {% endblock %} +
+{% endblock %} + {% block content %}
- {% block object-tools %} -
    - {% block object-tools-items %} - {% change_list_object_tools %} - {% endblock %} -
- {% endblock %} {% if cl.formset and cl.formset.errors %}

{% blocktranslate count counter=cl.formset.total_error_count %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktranslate %} diff --git a/docs/intro/_images/admin04t.png b/docs/intro/_images/admin04t.png index ef5e12b93c..4558ac5228 100644 Binary files a/docs/intro/_images/admin04t.png and b/docs/intro/_images/admin04t.png differ diff --git a/docs/intro/_images/admin05t.png b/docs/intro/_images/admin05t.png index f4e3214721..3ff15fc36f 100644 Binary files a/docs/intro/_images/admin05t.png and b/docs/intro/_images/admin05t.png differ diff --git a/docs/intro/_images/admin07t.png b/docs/intro/_images/admin07t.png new file mode 100644 index 0000000000..c03a7833f9 Binary files /dev/null and b/docs/intro/_images/admin07t.png differ diff --git a/docs/intro/_images/admin08t.png b/docs/intro/_images/admin08t.png index 23f48fdd41..046d025859 100644 Binary files a/docs/intro/_images/admin08t.png and b/docs/intro/_images/admin08t.png differ diff --git a/docs/intro/_images/admin12t.png b/docs/intro/_images/admin12t.png index b79465a4ac..a84a0cb28f 100644 Binary files a/docs/intro/_images/admin12t.png and b/docs/intro/_images/admin12t.png differ diff --git a/docs/intro/_images/admin13t.png b/docs/intro/_images/admin13t.png index 1567d32393..1d857cbaf5 100644 Binary files a/docs/intro/_images/admin13t.png and b/docs/intro/_images/admin13t.png differ diff --git a/docs/ref/contrib/admin/_images/list_filter.png b/docs/ref/contrib/admin/_images/list_filter.png index bdb58f9f38..962c4b3cae 100644 Binary files a/docs/ref/contrib/admin/_images/list_filter.png and b/docs/ref/contrib/admin/_images/list_filter.png differ diff --git a/docs/releases/6.1.txt b/docs/releases/6.1.txt index d10225dfdf..2539e599c7 100644 --- a/docs/releases/6.1.txt +++ b/docs/releases/6.1.txt @@ -401,6 +401,8 @@ backends. * The ``wide`` class is removed, as it was made obsolete by the new layout. +* The ``object-tools`` block is hoisted out of the ``content`` block in forms. + :mod:`django.contrib.gis` ------------------------- -- cgit v1.3