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管理列表中修饰单元格的内容.
事实证明,定制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,因此无需对您的应用程序或管理员进行其他更改即可实现此功能.