设置某些管理员更改列表行的样式
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.property1
是 True
,则将类 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(不是免费的)还提供“列表行和单元格属性”样式定制
【讨论】:
以上是关于设置某些管理员更改列表行的样式的主要内容,如果未能解决你的问题,请参考以下文章