在LinkColumn
的新版本中,我找不到django-tables2
的替代品。作者声明LinkColumn
已被弃用,不应使用。但是新的linkify
解决方案记录很少,并且没有旧版本的所有功能。例如,我有这个专栏:
edit = tables.LinkColumn(
'wagtailadmin_pages:edit', args=[A('page.pk')],
text='Edit'
)
它显示了一个名为Edit
的wagtail管理编辑页面的链接。使用linkify
根本无法实现相同的目的,因为linkify
只有在列上有有效的accessor
时才有效。但是访问者不能为所有行返回相同的静态文本(除非我修改模型以添加虚拟属性 - 但是这个特定的模型在第三方包中,无论如何它都会像管道磁带解决方案一样)。
在所有其他情况下,列不会显示链接。我研究了源代码,似乎这种情况根本不受django-tables2> 2.0.0的支持。
使用linkify
构建带有静态链接文本的链接列是否有任何干净且易于理解的方法?
回答我自己的问题。似乎用LinkColumn
功能完全取代linkify
是不可能的。以下代码解决了我的问题:
from django.urls import reverse
from django.utils.text import mark_safe
import django_tables2 as tables
from wagtail.core.models import PageRevision
class WagtailRevisionsTable(tables.Table):
title = tables.Column(
accessor='page.title',
linkify=lambda record: record.page.url,
verbose_name='Title'
)
edit = tables.Column(
accessor='page.pk'
)
class Meta:
model = PageRevision
fields = ('title', 'created_at', 'user', 'edit')
template_name = 'django_tables2/bootstrap-responsive.html'
def render_edit(self, value):
url = reverse('wagtailadmin_pages:edit', args=[value])
return mark_safe(f'<a href="{url}">Edit</a>')
旧LinkColumn
的代码更加简洁,我不明白改变的原因和文档确实无济于事。关于linkify
或render_col
方法的信息不足。
所以我希望这个答案可以帮助一些可怜的灵魂尝试将旧代码移植到django-tables2> = 2.0。