我想用 django-tables2 创建一个表,这样不同的行具有不同的属性。
默认情况下我会得到任何一个
<tr class="odd">
或
<tr class="even">
如何为某些行指定我自己的类?
同样,如果我有一个 CheckBoxColumn 并且我为此列指定了一些数据,它会进入值:
<input type="checkbox" name="col" value="123"/>
这对于确定选中了哪个复选框非常有用。但是,如何在创建表时将某些复选框设置为已选中?
我的场景:用户从一个大表中选择一些行。例如,表有
- 橙色 1
- 橙色 2
- 苹果 5
- 橙色 3
- 苹果 4
- cucumber 7
- 苹果 1
用户选择了 苹果 5 和 cucumber 7。
然后我想显示所有苹果和所有 cucumber ,因为用户至少选择了一个苹果和至少一个 cucumber 。这允许用户查看其他相关条目:
- 苹果 5
- 苹果 4
- cucumber 7
但是,我想通过使用 css 和/或显示选中的复选框来突出显示用户实际选择的条目:
- 苹果 5
- 苹果 4
- cucumber 7
最佳答案
好吧,让我发布我自己的解决方案。
我已经复制了标准模板 table.html 并对其进行了编辑。我只改了一行:
<tbody>
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
{% block table.tbody.row %}
<tr class="{{ row.tr_class }}"> <!-- CLASS FOR EACH ROW -->
代替
<tr class="{% cycle "odd" "even" %}">
这样您就可以为表中的每一行设置不同的类。它仍然是向您的表类添加一个不可见的列:
class MyTable(tables.Table):
tr_class=tables.Column(visible=False)
... # other columns
之后,无论何时创建表格,您都可以为任何特定行设置任何 CSS 类。请记住使用修改后的模板:
{% render_table div_table "modifiedtable.html" %}
当然,你也可以改变原来的table.html。
谁能提出一个更优雅的解决方案?
总的来说,我觉得 django_tables2 仍然缺少许多重要的功能,所以每次我尝试做一些不平凡的事情时,我都必须重新发明轮子。
定义tr_class
要使用它,您必须使用 custom rendering .例如:
class MyTable(tables.Table):
tr_class=tables.Column(visible=False, empty_values=())
def render_tr_class(self, value):
if value.chosen == True:
return 'highlight'
tr
将被赋予 highlight
类。
关于python - django-tables2 为不同的行指定不同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525670/