Вопрос:
В моем приложении отображается таблица со многими столбцами. Я использую приложение Django tables 2 для отображения таблицы. Я пытаюсь сделать элементы в одном столбце гиперссылки, чтобы пользователи могли щелкнуть. Шаблон url прост: /contact/pk/, например, /contact/2/. Это то, что у меня есть в моих моделях:
#models.py class Contact(models.Model): name = models.CharField(max_length=200) . . . class ContactTable(tables.Table): name = tables.LinkColumn(‘contact_detail’, args=[A(‘pk’)]) class Meta: model = Contact attrs = {«class»: «paleblue»} #urls.py url(r’^contact/(?P<item_id>d+)/$’, ‘app.views.contact_view’, name=’contact_detail’),
Однако элементы не имеют гиперссылки.
Лучший ответ:
Это решило это:
class ContactTable(tables.Table): edit_entries = tables.TemplateColumn(‘<a href=»/contact/{{record.id}}»>Edit</a>’) class Meta: model = Contact attrs = {«class»: «paleblue»} Ответ №1
Решение nixnotwin использует жестко кодированные URL-адреса. Использовать обратные URL-адреса:
class ContactTable(tables.Table): edit_entries = tables.TemplateColumn(‘<a href=»{% url ‘contact_detail’ record.id %}»>Edit</a>’) Ответ №2
Что вы передаете render_table в свой шаблон? Просто обычный QuerySet? Я предполагаю, что вы забыли создать экземпляр и настроить таблицу в своем представлении. Вот пример, представленный в документах:
# tutorial/views.py from django.shortcuts import render from django_tables2 import RequestConfig from tutorial.models import Person from tutorial.tables import PersonTable def people(request): table = PersonTable(Person.objects.all()) RequestConfig(request).configure(table) return render(request, ‘people.html’, {‘table’: table})
Если вы сделаете это так, оно должно работать нормально.
ОБНОВИТЬ:
Я знаю, что проблема уже решена, но я заметил, что name = tables.LinkColumn(‘contact_detail’, args=[A(‘pk’)]) находится внутри внутреннего класса Meta класса ContactTable. Он должен быть вне внутреннего класса Meta.