Django-tables2: гиперссылки в ячейках

У меня есть представление с именем events, отображающее два столбца. Один eventType и второй eventDates, в котором перечисляются даты. Это выглядит следующим образом:

eventType eventDate
foo 1900-01-01, 2010-02-02
bar 2000-01-01, 2010-02-02, 2010-03-03

Код для представления и таблицы выглядит следующим образом:

def events(request, pk):
    data = some_module.get_data(pk)
    data_table = MyTable(data)
    return render(request, "app/events.html", {"table": data_table})

Где data - список словарей, а MyTable - класс, наследующий от django_tables2.Table:

class MyTable(tables.Table):
    eventType = tables.Column()
    eventDates = tables.Column()

Ячейка в столбце EventDate может быть как пустой, так и содержать несколько дат. Это зависит от pk.

Я могу отобразить эту таблицу. Теперь я хочу, чтобы каждая дата была гиперссылкой, перенаправляющей на другое представление. Это представление будет выглядеть так:

def event_details(request, eventtype=et, eventdate=ed):
    data_event = some_module.get_event data(eventtype, eventdate)
    return render(request, "app/events_details.html", {"data_event ": data_event })

Вот мои проблемы. Во-первых, мне не удалось получить динамическое количество гиперссылок, меняющееся от ячейки к ячейке. Во-вторых, url должен содержать тип события и его дату. Например, если взять пример выше, то при клике на 2010-02-02 нужно перенаправить либо на:

eventtype=foo_eventdate=2010-02-02 или eventtype=bar_eventdate=2010-02-02, в зависимости от того, на какой 2020-02-02 я нажму.

Сначала я попытался разместить несколько ссылок в одной ячейке, следуя некоторым рекомендациям, например, из django-tables2-linkcolumn-multiple-items-in-the-same-cell или using-linkify-option-on-django-tables2-columns-to-create-links, но в конце концов моей главной проблемой являются те, что указаны выше, которые я не могу найти, как решить.

У меня не так много информации о конкретных данных и используемых типах. Однако если eventDate можно представить в виде списка, то следующий метод можно адаптировать для отображения ссылки для каждой отдельной даты. Это должно обеспечить прочную основу для решения вашей проблемы.

class MyTable(tables.Table):
    event_type = tables.Column()
    event_dates = tables.Column()

    def render_event_dates(self, record, value):
        dates = []
        for date in value:
            event_url = reverse(
                "event_details",
                kwargs={"event_type": record.event_type, "event_date": date},
            )
            dates.append(f'<a href="{event_url}">{date}</a>')

        return mark_safe(", ".join(dates))
Вернуться на верх