设置某些管理员更改列表行的样式

Posted

技术标签:

【中文标题】设置某些管理员更改列表行的样式【英文标题】:Styling certain admin change list rows 【发布时间】:2010-12-02 23:41:03 【问题描述】:

是否有一种直接、通用的方法可以根据其属性在管理更改列表元素上应用自定义样式?

更新

更准确地说:假设我有一个简单的模型对象。

Foo

   field1
   field2
   field3

   @property
    property1()
   @property
    property2()

ModelAdmin.list_display 被定义为可用字段的子集,因此并非每个属性(字段/属性)都显示在更改列表中。

我想在满足特定条件时将自定义 CSS 类应用于对象的行,例如:如果 foo_instance.property1True,则将类 bar 添加到相应的 tr 元素中。

【问题讨论】:

Change row colour in Django Admin List 的可能重复项 【参考方案1】:

现在将模板 admin/base_site.html 从默认的 Django 管理模板目录 (django/contrib/admin/templates) 复制到您在 TEMPLATE_DIRS 中使用的任何目录的管理子目录中。例如,如果您的 TEMPLATE_DIRS 包含“/home/my_username/mytemplates”,如上所述,则将 django/contrib/admin/templates/admin/base_site.html 复制到 /home/my_username/mytemplates/admin/base_site.html。不要忘记那个 admin 子目录。

请注意,任何 Django 的默认管理模板都可以被覆盖。要覆盖模板,只需执行与 base_site.html 相同的操作 - 将其从默认目录复制到自定义目录中,然后进行更改。

来自django's tutorial

【讨论】:

我知道覆盖管理模板;关键是我认为如果没有一些深入的黑客攻击就没有办法做到这一点,因为更改列表使用 result_list 包含标记,它返回列表 o HTML 对象(可能是表单集元素)。 取决于它的属性 @我的问题是这里的关键问题【参考方案2】:

“更改列表元素”和“它的属性”到底是什么意思?使用 CSS 2 或 CSS 3 选择器你可以做一些事情。否则,您可以使用 jQuery(或其他)轻松完成。由于它只是与演示相关,我认为这将是最干净的解决方案。

【讨论】:

【参考方案3】:

老问题,但如果您偶然发现它,以下提示可能会有所帮助。

您可以使用django-liststyle 自定义您的管理员更改列表行。

实现您的示例非常简单:

class FooAdmin(admin.ModelAdmin, ListStyleAdminMixin):
    ...
    def get_row_css(self, obj, index):
        if obj.property1:
            return 'bar'
        return ''

Django Suit(不是免费的)还提供“列表行和单元格属性”样式定制

【讨论】:

以上是关于设置某些管理员更改列表行的样式的主要内容,如果未能解决你的问题,请参考以下文章

更改Windows Update设置时,为何会提示“某些设置由你的系统管理员管理”?

仅更改某些 li 元素的列表样式[关闭]

开发技巧--改变表单列表页面显示样式为“卡片组”

如何复制节点列表?

触发/设置数据网格中特定行的样式

如何设置与选定行相邻的 TableView 行的样式?