Как дать столбцу в админке Django change_list класс CSS

Я хотел бы изменить ширину столбцов в списке, отображаемом администратором Django.

Можно ли как-то добавить имя класса CSS в столбец? Я бы предпочел не перезаписывать весь шаблон для этого.


person vdboor    schedule 21.04.2011    source источник


Ответы (3)


В Django >= 1.6 классы CSS включены в вывод list_display:

"Имена полей в list_display также будут отображаться как классы CSS в выводе HTML в форме column-<field_name> для каждого элемента <th>. Это можно использовать для установки ширины столбцов в файле CSS."

person StvnW    schedule 04.11.2013
comment
Весело. На самом деле я добавил этот коммит в Django во время последнего спринта. Приятно видеть, что он уже привык :-D - person vdboor; 07.11.2013
comment
@MarcioLuís Если ваш класс в admin.py содержит list_display = ('foo',), администратор Django выводит <th class="column-foo">. Вы можете использовать .column-foo { width: ... ; } в своем CSS. - person StvnW; 21.01.2016

Хотя эта функция реализована в версии 1.6, как сказал StvnW, для более ранних версий вы можете сделать следующее:

В admin.py:

class MyModelAdmin(admin.ModelAdmin):
    # your code here

    # specify a stylesheet just for the list view
    class Media:
        css = {'all': ('css/mymodel_list.css')}

В mymodel_list.css:

/* replace '5' with the column desired */
table#result_list td:nth-child(5) {
    width: 15em;
}

Указание table#result_list применит эту таблицу стилей только к представлению списка и не повлияет на обычную страницу администрирования для этой модели. Также обратите внимание, что хотя django использует th для первого столбца модели, он по-прежнему считается дочерним td.

person Scott    schedule 13.11.2013
comment
как мой случай. css = {'all': ('css/mymodel_list.css')} следует добавить запятую: css = {'all': ('css/mymodel_list.css', )} будет кортежем. - person carton.swing; 13.03.2018

Существует открытый тикет, который устраняет необходимость указания классов css для столбцов таблицы в представлении change_list.

Тем не менее... в описании билета есть фрагмент, который вводит пользовательскую таблицу стилей в ваш шаблон change_list:

{% extends "admin/change_list.html" %}
{% block extrastyle %}
  {{ block.super }}
  <link rel="stylesheet" type="text/css" href="/css/poll_admin_changelist.css" />
{% endblock extrastyle %}

Таким образом, вы не переопределяете весь шаблон, а только ту часть (экстрастиль), которая вам нужна.

Теперь вы можете внедрить свою собственную таблицу стилей и, например, оформить столбцы с помощью :nth-child-selector

Другой вариант — обернуть ваши определенные поля в html, что можно сделать с помощью list_display. Здесь вы можете определить ширину или класс для обернутого элемента. Однако это имеет смысл только в том случае, если вы хотите контролировать ширину ограниченного набора полей.

person arie    schedule 21.04.2011
comment
FWIW, этот билет теперь закрыт как фиксированный (по состоянию на июль 2013 г.) - person Bryan Oakley; 22.03.2017