Fixed #17050 -- Added some CSS class names to the admin index pages to facilitate per-app or per-model style customizations. Thanks to scytale for the report and to H0ff1 and thiderman for their work on the patch.
This commit is contained in:
parent
90d3af380e
commit
2e2c4968f6
|
@ -354,6 +354,7 @@ class AdminSite(object):
|
||||||
info = (app_label, model._meta.module_name)
|
info = (app_label, model._meta.module_name)
|
||||||
model_dict = {
|
model_dict = {
|
||||||
'name': capfirst(model._meta.verbose_name_plural),
|
'name': capfirst(model._meta.verbose_name_plural),
|
||||||
|
'object_name': model._meta.object_name,
|
||||||
'perms': perms,
|
'perms': perms,
|
||||||
}
|
}
|
||||||
if perms.get('change', False):
|
if perms.get('change', False):
|
||||||
|
@ -371,6 +372,7 @@ class AdminSite(object):
|
||||||
else:
|
else:
|
||||||
app_dict[app_label] = {
|
app_dict[app_label] = {
|
||||||
'name': app_label.title(),
|
'name': app_label.title(),
|
||||||
|
'app_label': app_label,
|
||||||
'app_url': reverse('admin:app_list', kwargs={'app_label': app_label}, current_app=self.name),
|
'app_url': reverse('admin:app_list', kwargs={'app_label': app_label}, current_app=self.name),
|
||||||
'has_module_perms': has_module_perms,
|
'has_module_perms': has_module_perms,
|
||||||
'models': [model_dict],
|
'models': [model_dict],
|
||||||
|
@ -408,6 +410,7 @@ class AdminSite(object):
|
||||||
info = (app_label, model._meta.module_name)
|
info = (app_label, model._meta.module_name)
|
||||||
model_dict = {
|
model_dict = {
|
||||||
'name': capfirst(model._meta.verbose_name_plural),
|
'name': capfirst(model._meta.verbose_name_plural),
|
||||||
|
'object_name': model._meta.object_name,
|
||||||
'perms': perms,
|
'perms': perms,
|
||||||
}
|
}
|
||||||
if perms.get('change', False):
|
if perms.get('change', False):
|
||||||
|
@ -428,6 +431,7 @@ class AdminSite(object):
|
||||||
# information.
|
# information.
|
||||||
app_dict = {
|
app_dict = {
|
||||||
'name': app_label.title(),
|
'name': app_label.title(),
|
||||||
|
'app_label': app_label,
|
||||||
'app_url': '',
|
'app_url': '',
|
||||||
'has_module_perms': has_module_perms,
|
'has_module_perms': has_module_perms,
|
||||||
'models': [model_dict],
|
'models': [model_dict],
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
{% if app_list %}
|
{% if app_list %}
|
||||||
{% for app in app_list %}
|
{% for app in app_list %}
|
||||||
<div class="module">
|
<div class="app-{{ app.app_label }} module">
|
||||||
<table>
|
<table>
|
||||||
<caption>
|
<caption>
|
||||||
<a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">
|
<a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
</a>
|
</a>
|
||||||
</caption>
|
</caption>
|
||||||
{% for model in app.models %}
|
{% for model in app.models %}
|
||||||
<tr>
|
<tr class="model-{{ model.object_name|lower }}">
|
||||||
{% if model.admin_url %}
|
{% if model.admin_url %}
|
||||||
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
|
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
|
@ -3391,7 +3391,11 @@ class CSSTest(TestCase):
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
|
|
||||||
def test_css_classes(self):
|
def test_field_prefix_css_classes(self):
|
||||||
|
"""
|
||||||
|
Ensure that fields have a CSS class name with a 'field-' prefix.
|
||||||
|
Refs #16371.
|
||||||
|
"""
|
||||||
response = self.client.get('/test_admin/admin/admin_views/post/add/')
|
response = self.client.get('/test_admin/admin/admin_views/post/add/')
|
||||||
|
|
||||||
# The main form
|
# The main form
|
||||||
|
@ -3407,6 +3411,23 @@ class CSSTest(TestCase):
|
||||||
self.assertContains(response, '<td class="field-url">')
|
self.assertContains(response, '<td class="field-url">')
|
||||||
self.assertContains(response, '<td class="field-posted">')
|
self.assertContains(response, '<td class="field-posted">')
|
||||||
|
|
||||||
|
def test_index_css_classes(self):
|
||||||
|
"""
|
||||||
|
Ensure that CSS class names are used for each app and model on the
|
||||||
|
admin index pages.
|
||||||
|
Refs #17050.
|
||||||
|
"""
|
||||||
|
# General index page
|
||||||
|
response = self.client.get("/test_admin/admin/")
|
||||||
|
self.assertContains(response, '<div class="app-admin_views module">')
|
||||||
|
self.assertContains(response, '<tr class="model-actor">')
|
||||||
|
self.assertContains(response, '<tr class="model-album">')
|
||||||
|
|
||||||
|
# App index page
|
||||||
|
response = self.client.get("/test_admin/admin/admin_views/")
|
||||||
|
self.assertContains(response, '<div class="app-admin_views module">')
|
||||||
|
self.assertContains(response, '<tr class="model-actor">')
|
||||||
|
self.assertContains(response, '<tr class="model-album">')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import docutils
|
import docutils
|
||||||
|
|
Loading…
Reference in New Issue