Связать столбец со статическим текстом, используя django-tables2 - PullRequest
0 голосов
/ 09 марта 2019

Я не могу найти замену LinkColumn в новых версиях django-tables2. Автор заявляет, что LinkColumn устарела и не должна использоваться. Но новое решение linkify плохо документировано и не обладает всеми функциями старой версии. Например, у меня есть этот столбец:

    edit = tables.LinkColumn(
        'wagtailadmin_pages:edit', args=[A('page.pk')],
        text='Edit'
    )

Отображает ссылку на страницу редактирования администратора трясогузки, которая называется Edit. Просто нет способа добиться того же, используя linkify, потому что linkify работает, только если у вас есть действительный accessor в столбце. Но средство доступа не может возвращать один и тот же статический текст для всех строк (если я не изменю модель, чтобы добавить фиктивное свойство - но эта конкретная модель находится в пакете стороннего производителя, и в любом случае это будет похоже на решение для клейкой ленты).

Во всех остальных случаях в столбце не будет отображаться ссылка. Я изучил исходный код, и кажется, что такой случай просто не поддерживается django-tables2> 2.0.0.

Существует ли какой-либо простой и понятный способ построения столбца ссылок со статическим текстом ссылки с использованием linkify?

1 Ответ

1 голос
/ 12 марта 2019

Отвечая на мой собственный вопрос.Кажется, невозможно полностью заменить 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.

...