Link 使用 django-tables2 的带有静态文本的列
Link column with a static text using django-tables2
我在 django-tables2
的新版本中找不到 LinkColumn
的替代品。作者声明 LinkColumn
已弃用,不应使用。但是新的 linkify
解决方案的文档很少,并且不具备旧版本的所有功能。例如,我有这个专栏:
edit = tables.LinkColumn(
'wagtailadmin_pages:edit', args=[A('page.pk')],
text='Edit'
)
它向名为 Edit
的 wagtail 管理编辑页面显示 link。使用 linkify
根本无法实现相同的效果,因为 linkify
仅在列上具有有效 accessor
时才有效。但是访问器不能 return 所有行的相同静态文本(除非我修改模型以添加虚拟 属性 - 但这个特定模型在第 3 方包中,无论如何感觉就像一个管道胶带解决方案).
在所有其他情况下,列将不会显示 link。我研究了源代码,似乎 django-tables2 > 2.0.0.
根本不支持这种情况
是否有任何清晰易懂的方法来使用 linkify
构建具有静态 link 文本的 link 列?
回答我自己的问题。似乎无法用linkify
特性完全替代LinkColumn
。下面的代码解决了我的问题:
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 的可怜人。
我在 django-tables2
的新版本中找不到 LinkColumn
的替代品。作者声明 LinkColumn
已弃用,不应使用。但是新的 linkify
解决方案的文档很少,并且不具备旧版本的所有功能。例如,我有这个专栏:
edit = tables.LinkColumn(
'wagtailadmin_pages:edit', args=[A('page.pk')],
text='Edit'
)
它向名为 Edit
的 wagtail 管理编辑页面显示 link。使用 linkify
根本无法实现相同的效果,因为 linkify
仅在列上具有有效 accessor
时才有效。但是访问器不能 return 所有行的相同静态文本(除非我修改模型以添加虚拟 属性 - 但这个特定模型在第 3 方包中,无论如何感觉就像一个管道胶带解决方案).
在所有其他情况下,列将不会显示 link。我研究了源代码,似乎 django-tables2 > 2.0.0.
根本不支持这种情况是否有任何清晰易懂的方法来使用 linkify
构建具有静态 link 文本的 link 列?
回答我自己的问题。似乎无法用linkify
特性完全替代LinkColumn
。下面的代码解决了我的问题:
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 的可怜人。