我有一个table.py,在这里我想要更改每个BooleanColumn的真值和假值的图标。我知道BooleanColumn的yesno参数可以修改它,但我不知道如何覆盖所有BooleanColumns的缺省值。这是tables.py的代码(aacsb、amba、equis、mba、bsc、msc和doubedegree is BooleanFields):
from django_tables2 import Column, Table
from manager.models import Partner
class PartnerTable(Table):
country_name = Column(accessor='country.name', verbose_name='Country')
region_name = Column(accessor='country.region.name', verbose_name='Region')
class Meta:
model = Partner
fields = ('name',
'country_name',
'region_name',
'website',
'aacsb',
'amba',
'equis',
'mba',
'bsc',
'msc',
'doubledegree',
)
发布于 2014-11-15 04:28:18
1)因此,您可以简单地重写默认值为“yesno
”的str
(它只是str
):
some_name = BooleanColumn(yesno='1,2')
或删除文本:
some_name = BooleanColumn(yesno=',')
2)使用css
,您可以指定自定义映像(不要忘记设置yesno=','
):
span.true {
background: url(../img/true.gif) top center no-repeat;
}
span.false {
background: url(../img/false.gif) top center no-repeat;
}
3)为span
指定一些额外的吸引(但不指定class
!):
some_name = BooleanColumn(attrs={'span': {'style': 'color:blue'}})
4)如果出于某些原因需要更改默认类设置行为(true
或false
),则应重写BooleanColumn
及其方法render
from django.utils.html import escape
from django.utils.safestring import mark_safe
from django_tables2.utils import AttributeDict
class CustomBooleanColumn(BooleanColumn):
def render(self, value):
value = bool(value)
text = self.yesno[int(not value)]
html = '<span %s>%s</span>'
class_name = 'some_class_false'
if value:
class_name = 'some_class_true'
attrs = {'class': 'class_name'}
attrs.update(self.attrs.get('span', {}))
return mark_safe(html % (AttributeDict(attrs).as_html(), escape(text)))
并覆盖您的字段
some_name = CustomBooleanColumn(yesno=',')
发布于 2014-11-16 02:40:57
这是完整的代码,感谢马佐汉的回答。注意,我使用了django-bootstrap3,这样我就可以使用引导图标:
from django_tables2 import BooleanColumn, Column, Table
from django.utils.safestring import mark_safe
from django_tables2.utils import AttributeDict
from manager.models import Partner
class BootstrapBooleanColumn(BooleanColumn):
def __init__(self, null=False, **kwargs):
if null:
kwargs["empty_values"] = ()
super(BooleanColumn, self).__init__(**kwargs)
def render(self, value):
value = bool(value)
html = "<span %s></span>"
class_name = "glyphicon glyphicon-remove"
if value:
class_name = "glyphicon glyphicon-ok"
attrs = {'class': class_name}
attrs.update(self.attrs.get('span', {}))
return mark_safe(html % (AttributeDict(attrs).as_html()))
class PartnerTable(Table):
country_name = Column(accessor='country.name', verbose_name='Country')
region_name = Column(accessor='country.region.name', verbose_name='Region')
aacsb = BootstrapBooleanColumn()
amba = BootstrapBooleanColumn()
equis = BootstrapBooleanColumn()
mba = BootstrapBooleanColumn()
bsc = BootstrapBooleanColumn()
msc = BootstrapBooleanColumn()
doubledegree = BootstrapBooleanColumn()
class Meta:
model = Partner
fields = ('name',
'country_name',
'region_name',
'website',
'aacsb',
'amba',
'equis',
'mba',
'bsc',
'msc',
'doubledegree',
)
https://stackoverflow.com/questions/26945064
复制相似问题