Изменение цвета строки в списке администратора Django

Я хочу выделить строки (установить цвет backgorund) на странице администратора Django (change_list.html) на основе поля в модели, называемой status. Как лучше всего это сделать?

У меня 3 статуса. Открыто, Активно, Закрыто. Я бы хотел, чтобы строки с открытым были зелеными, активным-оранжевыми, а закрытым-красными.

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

3 ответов


проверить django-liststyle, именно то, что вам нужно.


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

в admin.py для приложения можно определить средство визуализации содержимого ячейки таблицы. Вот вариант для моей библиотеки фильмов:

class FilmAdmin(admin.ModelAdmin):

   def film_status(self, obj):
        if obj.status() != 'active':
            return '<div style="width:100%%; height:100%%; background-color:orange;">%s</div>' % obj.status()
        return obj.status()
    film_status.allow_tags = True

    list_display = ('id', 'title', 'film_status')

admin.site.register(Film, FilmAdmin)

вот, я создал имя поля film_status, который не существует в модели фильма и определяется как метод FilmAdmin. Он получает переданный элемент для каждой строки. Я должен был сказать визуализатору allow_tags, который говорит приложению администратора не "безопасных" HTML-контент.

это не заполнит всю ячейку, хотя, поскольку сама ячейка имеет некоторое заполнение. Будет заполнена только часть ячейки, которую ваше приложение может заполнить (как определено таблицей стилей администратора). Но для моих целей этого достаточно.

там вы идете. Два совершенно разных, но полезных метода для украшения содержимого ячейки в списке администраторов Django.


как оказалось, настройка change_list_results.html и связанный с ним генератор-довольно медведь. Я хотел бы предложить совершенно другое решение: переопределить change_list.html для вашего приложения и использовать Javascript, чтобы сделать эффект, который вы хотите.

у меня была точно такая же проблема у вас. Для библиотеки фильмов мне нужно было знать, была ли регистрация режиссера "активной" или что-то еще. Вот весь мой override:

{% extends "admin/change_list.html" %}

{% block extrahead %}
{{ block.super }}
<script type="text/javascript">
(function($) {
    $(document).ready(function() {
        $('#result_list tr td:nth-child(7)').each(function() {
            if ($(this).text() != 'active') {
                $(this).css('background-color', 'orange');
            }
        });
    });
})(django.jQuery);
</script>
{% endblock %}

этот файл ${TEMPLATE_DIR}/admin/films/film/change_list.html. Список результатов Django-id'D result_list, все, что я делаю здесь, это украсить столбец 7 другим фоновым стилем, если содержимое столбца мне не нравится.

администратор уже предоставляет jQuery, поэтому для этой работы не требуется никаких дополнительных изменений в вашем приложении или администраторе.