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)
这非常适合确定选中了哪个复选框.但是,如何在创建表时将一些复选框设置为选中状态?
我的场景:用户从大表中选择一些行.例如,表格有
用户选择aaple 5和黄瓜7.
然后我想显示所有苹果和所有黄瓜,因为用户至少挑选了一个苹果和至少一个黄瓜.这允许用户查看其他相关条目:
但是,我想通过使用css和/或显示选中的复选框来突出显示用户实际选择的条目:
好吧,让我发布自己的解决方案.
我复制了标准模板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仍然缺少许多重要的功能,所以每次我尝试做一些非常重要的事情时我都要重新发明轮子.
要使用它,您必须使用自定义渲染.例如:
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)