【发布时间】:2018-09-06 02:17:50
【问题描述】:
使用 django-tables2 非常愉快。我现在正试图弄清楚如何根据行内容更改行的 css。例如,给定表格:
header 1 | header 2
---------|---------
value 1 | 1
value 2 | 1
value 3 | 2
value 4 | 2
value 5 | 2
value 6 | 3
value 7 | 3
我希望能够为具有相同“标题 2”值的连续行设置样式,并使用相同的类。使用 itertools.groupby,很容易对应该分组的值进行分组,但我不知道如何在表格对象中移动并更新每一行的类属性。
对于列,可以动态更新属性。例如,在 init 中,self.columns['ColumnName'].column.attrs = {'td': {'class': 'foo'}} 有效。 但是,对于行,这(以及各种排列)不起作用:
for i in self.rows:
i.attrs = {'tr': {'class': 'foo'}} # *** AttributeError, can't set attribute
i.cells.row.attrs = {...} # *** AttributeError
i.cells.row.attrs['class'] = 'foo' # Seems to work, but attrs not updated
# same as above
i.cells.row.attrs.update({'tr': {'class': 'foo'}})
i.table.row_attrs = {'class': 'foo'} # works, but applies to the whole table at once.
很明显,我在这里搞错了。文档建议在 Meta 类中使用 row_attrs 并且可以具有返回类值的函数。但是,在该函数中,一次只能看到一行(作为“记录”对象传递),而在这种情况下,需要将表作为一个整体进行解析,因此 init 看起来像一个更好的地方来解决这个问题。
我们将不胜感激这种棘手情况的解决方案或任何指针。
【问题讨论】:
-
我仍然认为你应该使用
row_attrs,带有一个可调用的。但是它需要保持一些状态,所以一个简单的 lambda 是行不通的。为什么需要“解析整个表格”? -
@Jieter,非常感谢您的反馈。我可能不明白如何正确使用 row_attrs。我假设您的意思是在文档中指示的 Meta 类中。如果我将它与可调用对象一起使用,据我所知,我只能访问当前行的值,但是为了进行分组(我想用它来更改背景颜色),我需要一种知道当前行与前一行相比何时具有新值的方法,然后更改为不同的 css 类。它们有很多数据值,但我只想使用两种在数据值发生变化时会间歇性变化的 bg 颜色。
标签: django-tables2