如何使用 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()
因为确实存在这样的方法
使用以下 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, therender()
method of thetables.LinkColumn()
instance you assigned toedit
while defining yourCarHistoryTable
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()
因为确实存在这样的方法