django-tables2为不同的行指定不同的属性

osa*_*osa 7 css python checkbox django-tables2

我想用django-tables2创建一个表,以便不同的行具有不同的属性.

默认情况下,我得到了

<tr class="odd">
Run Code Online (Sandbox Code Playgroud)

要么

<tr class="even">
Run Code Online (Sandbox Code Playgroud)

如何为某些行指定自己的类?

同样,如果我有一个CheckBoxColumn并且我为此列指定了一些数据,那么它将进入以下:

<input type="checkbox" name="col" value="123"/>
Run Code Online (Sandbox Code Playgroud)

这非常适合确定选中了哪个复选框.但是,如何在创建表时将一些复选框设置为选中状态?

我的场景:用户从大表中选择一些行.例如,表格有

  • 橙色1
  • 橙色2
  • 苹果5
  • 橙色3
  • 苹果4
  • 黄瓜7
  • aaple 1

用户选择aaple 5黄瓜7.

然后我想显示所有苹果和所有黄瓜,因为用户至少挑选了一个苹果和至少一个黄瓜.这允许用户查看其他相关条目:

  • 苹果5
  • 苹果4
  • 黄瓜7

但是,我想通过使用css和/或显示选中的复选框来突出显示用户实际选择的条目:

  • 苹果5
  • 苹果4
  • 黄瓜7

osa*_*osa 9

好吧,让我发布自己的解决方案.

我复制了标准模板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 -->
Run Code Online (Sandbox Code Playgroud)

代替

    <tr class="{% cycle "odd" "even" %}">
Run Code Online (Sandbox Code Playgroud)

这样,您可以为表中的每一行设置不同的类.它仍然是为您的表类添加一个不可见的列:

class MyTable(tables.Table):
  tr_class=tables.Column(visible=False)
  ... # other columns
Run Code Online (Sandbox Code Playgroud)

之后,无论何时创建表,都可以为任何特定行设置任何CSS类.请记住使用修改后的模板:

{% render_table div_table "modifiedtable.html" %}  
Run Code Online (Sandbox Code Playgroud)

当然,您也可以更改原始table.html.

任何人都可以提出更优雅的解决方案吗?

总的来说,我有一种感觉,django_tables2仍然缺少许多重要的功能,所以每次我尝试做一些非常重要的事情时我都要重新发明轮子.

定义tr_class

要使用它,您必须使用自定义渲染.例如:

class MyTable(tables.Table):
 tr_class=tables.Column(visible=False, empty_values=())
 def render_tr_class(self, value):
   if value.chosen == True:
     return 'highlight'
Run Code Online (Sandbox Code Playgroud)

并且tr将给予全班highlight.


小智 5

我有一个非常简单的解决方法

class MyTable(tables.Table):
    source = tables.Column()

    def render_source(self, value):
        if value == 'some_value':
            return mark_safe("<span class='highlight_this_row'>%s</span>" % (escape(value)))
        else:
            return value
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用jQuery实际突出显示该行,而不是为自定义呈现创建完整的自定义HTML页面.

$('.highlight_this_row').parent().parent().addClass('highlight');
Run Code Online (Sandbox Code Playgroud)

如果您没有定义"突出显示"类,则可以将其定义为:

<style>
    .highlight{
        background-color: black
    }
</style>
Run Code Online (Sandbox Code Playgroud)