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

How to Conditionally render a Link Column with Django Tables 2?

使用以下 table 当 returning 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()

理想情况下,我想 return 非 NEW 状态的汽车的空文本。对于其他汽车,我想渲染编辑 link.

我知道你假设你可以调用 super().render_edit(),但那是 不是这样的。 django-tables2 用来决定它应该使用什么 render-callable 的逻辑如下所示:

If a method render_<columnname> is defined on the table, it is used. In any other case, the render() method of the tables.LinkColumn() instance you assigned to edit while defining your CarHistoryTable is used.

现在,为了实现您的目标,我会这样做:

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'
    )

这定义了一个自定义列,该列派生自您在现有汽车的情况下所需的 LinkColumn。 render()的实现可以调用super().render()因为确实存在这样的方法