在Django Admin List中更改行颜色

Joh*_*ohn 12 django django-templates django-admin

我想根据名为status的模型中的字段突出显示Django Admin页面(change_list.html)中的行(设置backgorund颜色).做这个的最好方式是什么?

我有3种状态.开放,主动,封闭.我想要打开的行为绿色,活动为橙色并且关闭为红色.

我找到了有关更改模板的文档,但不知道如何检查状态以为行着色.

Elf*_*erg 19

我错了,还有另一种选择只使用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)
Run Code Online (Sandbox Code Playgroud)

在这里,我创建了一个字段名称,film_status它在Film模型中不存在,并将其定义为一种方法FilmAdmin.它会传递每一行的项目.我必须告诉渲染器allow_tags,它告诉管理员应用程序不要"安全"HTML内容.

但是,这不会填满整个单元格,因为单元格本身有一些填充.只有您的应用程序允许填充的单元格部分(由管理员的样式表定义)才会被填充.但这对我的目的来说已经足够了.

你去吧 两种完全不同但有用的技术,用于在Django管理列表中修饰单元格的内容.

  • 下一个答案将会有所帮助:/sf/answers/1148777101/。`format_html()` 效果很好 (2认同)

Elf*_*erg 7

事实证明,定制change_list_results.html和相关的生成器是一个很大的问题.我想提出一个完全不同的解决方案:为您的应用程序覆盖change_list.html,并使用Javascript来实现您想要的效果.

我遇到了同样的问题.对于电影库,我需要知道电影制片人的注册是"活跃的"还是其他什么.这是我的覆盖的全部内容:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

这个文件是${TEMPLATE_DIR}/admin/films/film/change_list.html.Django的结果列表是id'd result_list,如果列的内容不符合我的喜好,我在这里所做的就是用不同的背景样式装饰第7列.

管理员已经提供了jQuery,因此无需对您的应用程序或管理员进行其他更改即可实现此功能.

  • 哦,如果你想改变整行(圣诞节!)你可以通过定位父母的所有孩子来做到这一点:$('td',$(this).parent('tr'))而不是$ (这个). (2认同)

s29*_*s29 7

看看django-liststyle,正是你所追求的.