Пользовательская ссылка на колонке
Я работаю с 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;
}