Хорошо, позвольте мне опубликовать мое собственное решение.
Я скопировал стандартный шаблон 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
.