django-tables2 为所有 BooleanColumn 编辑 yesno 参数

Mik*_*hov 3 python django django-tables2

我有一个 table.py,我想在其中更改每个 BooleanColumn 的 True 和 False 值的图标。我知道它可以通过 BooleanColumn 的 yesno 参数进行修改,但我不知道如何覆盖所有 BooleanColumns 的默认值。这是tables.py的代码(aacsb、amba、equis、mba、bsc、msc和doubedegree是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',
                  )
Run Code Online (Sandbox Code Playgroud)

mad*_*han 5

1)所以你可以简单地覆盖yesno哪个默认值是“?,?” (它只是str):

some_name = BooleanColumn(yesno='1,2')
Run Code Online (Sandbox Code Playgroud)

或删除文本:

some_name = BooleanColumn(yesno=',')
Run Code Online (Sandbox Code Playgroud)

2)使用css您可以指定自定义图像(不要忘记 set yesno=','):

span.true {
    background: url(../img/true.gif) top center no-repeat;
}

span.false {
    background: url(../img/false.gif) top center no-repeat;
}
Run Code Online (Sandbox Code Playgroud)

3)指定一些额外的属性span(但不要指定class!):

some_name = BooleanColumn(attrs={'span': {'style': 'color:blue'}})
Run Code Online (Sandbox Code Playgroud)

4)如果由于某些原因你想改变默认的类设置行为(truefalse) - 你应该覆盖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)))
Run Code Online (Sandbox Code Playgroud)

并覆盖你的领域

some_name = CustomBooleanColumn(yesno=',')
Run Code Online (Sandbox Code Playgroud)