在Django Admin

时间:2016-05-01 03:33:16

标签: python html django django-admin

我试图为整个Django表格单元着色,以下代码只对Django Admin中的文本着色,而不是整个表格单元格。目前的情况如下:

enter image description here

这是当前的代码

class Student(models.Model):

    def city_and_zip(self):
        if self.city_zip:
            cell_html = '<div style = "background-color:#e6f2ff;">%s</div>'
        else:
            cell_html = '<div>%s</div>'

        return cell_html % self.city_zip

    city_and_zip.allow_tags = True

再次,它正确地着色它......但只是在某种程度上。我想为整个细胞着色。将div改为th不起作用

2 个答案:

答案 0 :(得分:1)

当您为modelAdmin声明list_display时,td元素包含此字段的css类与field-'list_display_name'类似。我的情况是field-city_and_zip 所以你可以为这个类添加css选择器。 Django为这种方法提供了许多解决方案。这是一个:

class StudentAdmin(admin.ModelAdmin):

    @property
    def media(self):
        media = super(ProductAdmin, self).media
        css = {
            "all": (
                "css/your.css",
            )
        }
        media.add_css(css)
        return media 

另一方面,您可以在管理模型中编写class Media

class StudentAdmin(admin.ModelAdmin):

    class Media:
        css = {"all":("css/your.css",)}

然后将此css文件放在静态路径中并编写选择器:

.field-city_and_zip {
     background-color: #e6f2ff;
}

它应该像你需要的那样工作。您也可以将css直接放在管理员基础模板中 more information about admin page

答案 1 :(得分:1)

您可以通过两种方式更改admin css资产:

  1. 模型级别:将所需的css文件添加到管理模型中。

    class MyModelAdmin(admin.ModelAdmin):
        class Media:
            js = ('js/admin/my_own_admin.js',)    
            css = {
                'all': ('css/admin/my_own_admin.css',)
            }
    
  2. 模板级别:如果您想要更改管理员的外观,则应覆盖管理员模板。这里详细介绍了这一点:Overriding admin templates
  3. 有时您可以扩展原始管理文件,然后在django/contrib/admin/templates/admin/base.html中覆盖{% block extrastyle %}{% endblock %}之类的块作为示例。