使用django-tables2使用静态文本链接列

问题描述 投票:0回答:1

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构建带有静态链接文本的链接列是否有任何干净且易于理解的方法?

django django-tables2
1个回答
1
投票

回答我自己的问题。似乎用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的代码更加简洁,我不明白改变的原因和文档确实无济于事。关于linkifyrender_col方法的信息不足。

所以我希望这个答案可以帮助一些可怜的灵魂尝试将旧代码移植到django-tables2> = 2.0。

© www.soinside.com 2019 - 2024. All rights reserved.