Пользовательская ссылка на колонке

Я работаю с django-tables2 для отображения информации о пациенте на странице. Я создаю таблицу следующим образом:

class PatientListView(tables.Table):
    name = tables.Column('Practice')
    patientid = tables.Column()
    firstname = tables.Column()
    lastname = tables.Column()
    dob = tables.Column()
    addressline1 = tables.Column()
    addressline2 = tables.Column()
    city = tables.Column()
    state = tables.Column()
    zipcode = tables.Column()

    class Meta:
        template_name = 'django_tables2/bootstrap.html'

и затем я заполняю таблицу в моем представлении результатом sql-запроса следующего содержания:

table = PatientListView(patients)

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

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

Если django-tables2 не является правильным решением для этой проблемы, я готов выслушать предложения о других способах достижения моей цели.

Вариант 1: превратить каждый столбец в ссылку

Вы можете сделать вызываемый элемент, который преобразует record в ссылку, и добавить его во все столбцы, например:

def get_link(record):
    return f'www.example.com/patients/{record.patientid}'


class PatientListView(tables.Table):
    name = tables.Column('Practice', linkify=get_link)
    patientid = tables.Column(linkify=get_link)
    firstname = tables.Column(linkify=get_link)
    lastname = tables.Column(linkify=get_link)
    dob = tables.Column(linkify=get_link)
    addressline1 = tables.Column(linkify=get_link)
    addressline2 = tables.Column(linkify=get_link)
    city = tables.Column(linkify=get_link)
    state = tables.Column(linkify=get_link)
    zipcode = tables.Column(linkify=get_link)

    class Meta:
        template_name = 'django_tables2/bootstrap.html'

Вариант 2: сделать строку кликабельной

Другой вариант - создать атрибут data-href и использовать JavaScript, чтобы он вел себя как ссылка, с:

def get_link(record):
    return f'www.example.com/patients/{record.patientid}'


class PatientListView(tables.Table):
    name = tables.Column('Practice')
    patientid = tables.Column()
    firstname = tables.Column()
    lastname = tables.Column()
    dob = tables.Column()
    addressline1 = tables.Column()
    addressline2 = tables.Column()
    city = tables.Column()
    state = tables.Column()
    zipcode = tables.Column()

    class Meta:
        row_attrs = {'data-link': get_link}

и затем добавьте немного JavaScript:

$(function() {
    $('tr[data-href]').on('click', function() {
        window.location = $(this).data('href');
    });
});

и, возможно, стилизовать строку следующим образом:

tr[data-href] {
    cursor: pointer;
}
Вернуться на верх