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))