如何使用Django Tables 2有条件地呈现链接列?

时间:2018-02-15 10:44:57

标签: python django django-tables2

返回BoundColumn时使用下表,它是纯文本而不是html。

class CarHistoryTable(tables.Table):

    edit = tables.LinkColumn(
        'Car:update',
        kwargs={'pk': A('id')},
        orderable=False,
        text='Edit'
    )

    def render_edit(self, record, value, bound_column):
        if record.state != Car.NEW:
            return ''
        return super().render_edit()

理想情况下,我想为不是NEW州的汽车返回一个空文本。对于其他汽车,我想渲染编辑链接。

1 个答案:

答案 0 :(得分:1)

我知道您认为可以致电super().render_edit(),但那可以 不是这样的。逻辑django-tables2用来决定它应该使用的render-callable,如下所示:

  

如果在表上定义了方法render_<columnname>,则使用它。在任何其他情况下,都会使用您在定义render()时分配给tables.LinkColumn()的{​​{1}}实例的edit方法。

现在,为了实现你的目标,我会做这样的事情:

CarHistoryTable

这定义了一个自定义列,该列来自现有汽车所需的LinkColumn。 class CarUpdateLinkColumn(tables.LinkColumn): def render(self, value, record, bound_column): if record.state != Car.NEW: return '' return super().render(value, record, bound_column) class CarHistoryTable(tables.Table): edit = tables.CarUpdateLinkColumn( 'Car:update', kwargs={'pk': A('id')}, orderable=False, text='Edit' ) 的实施可以调用render(),因为这种方法确实存在。