使用django-tables2从您的模型中获取表格非常容易。在我的情况下,我需要根据其值来格式化我的一个表列。
在我当前的html表中,它将如下所示:
{% if record.status|stringformat:"s" == "New" %}
<td class="bg-success></td>
如果值为New,则单元格背景应为绿色。
根据我的发现,可能有3种方法可以做这样的事情:
更新了解决方案:
1.使用适当的背景颜色创建一个类和一个css规则,并将其添加到列中:
class MyTable(tables.Table):
status = tables.Column(attrs={"class": lambda record: record.status})
.New {
background-color: green
}
这种方式有效,但我认为record.status
可以工作,没有lambda。
2.您可以指定如何呈现列:
class MyTable(tables.Table):
status = tables.Column()
def render_status(self, value):
if value.name == "New":
change class accordingly
因此,改变类部分是我的选择。
您还可以创建自定义列:
class StatusColumn(tables.Column):
def render(self, value):
if value == "New":
return format_html('<span class="text-success">{}</span>', value)
我使用span标记来传递一个bootstrap类来格式化单元格。
3.使用TemplateColumn并传递html:
class MyTable(tables.Table):
status = tables.TemplateColumn("""
{% if record.status|stringformat:"s" == "New" %}
<td class="bg-success"></th>
{% else %}
<td class="bg-danger"></th>
{% endif %}
""")
这样就可以正确地创建新列。
我仍然在寻找如何做到这一点,我将不胜感激。
答案 0 :(得分:1)
根据您的确切需求,有不同的解决方案。
<td></td>
)如果要向<td>
标记添加属性,则必须使用django-tables2调用column attributes。
它支持固定值,但也允许callable使用正在呈现的记录的某些值。
比方说,您有一个包含字段color
的记录,并且您希望将该颜色用作单元格的背景颜色。
class Table(tables.Table):
person = tables.Column(attrs={
'td': {
'class': 'person-column',
'style': lambda record: 'background-color: {}'.format(record.color)
}
})
或者更具体地说是你的例子:
class MyTable(tables.Table):
status = tables.Column(attrs={'td': {'class': lambda value: 'bg-success' if value == 'New' else 'bg-danger' }})
或没有lambda:
def status_attr(record):
return 'bg-success' if value == 'New' else 'bg-danger'
class MyTable(tables.Table):
status = tables.Column(attrs={'td': {'class': status_attr}})
按内容我的意思是<td></td>
标记内的所有内容。 django-tables2的API允许以各种方式更改单元格的内容,在文档中称为custom data。
您的解决方案2和3已经显示了执行此操作的方法,但是,您无法以这些方式更改单元属性。您可能能够实现类似于此<td><td class="bg-success">...</td></td>
的输出,这可能看起来像您想要的,但不是有效的HTML。