Не открывает ссылку в Django проекте

LevikV

Новичок
Пользователь
Июл 8, 2020
2
0
1
Здравствуйте. Помогите разобраться, что я делаю не так. Вообщем суть проблемы: не открывает детальную страницу информации о записи в БД.
Объявил URL преобразование в файле urls.py
path('book/<int:pk>', views.BookDetailView.as_view(), name='book-detail')
URL генерирую методом get_absolute_url() в файле book_list.html
Код:
      {% for book in book_list %}
          <li>
            <a href="{{ book.get_absolute_url }}">{{ book.title }}</a> ({{ book.author }})
          </li>
      {% endfor %}
Метод get_absolute_url() объявлен в модели book в файле models.py
Python:
    def get_absolute_url(self):
        """
        Возвращает URL для доступа к конкретному экземпляру книги
        """
        return reverse('book-detail', args=[str(self.id)])
В представлении объявил объект
Python:
class BookDetailView(generic.ListView):
    model = Book
Так же создал шаблон book_detail.html.

В результате ссылка формируется как надо, но при нажатии на нее ничего не происходит.

Вот ссылка на весь проект Проект на GitHub


Мой компьютер на базе Windows 10
Python 3.8.3
Package Version
---------- -------
asgiref 3.2.10
Django 3.0.8
pip 20.1.1
pytz 2020.1
setuptools 47.3.1
sqlparse 0.3.1
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вы для станицы детальной информации используйте ListView, а нужно DetailView, также нужно указать имя шаблона в представлении:
Python:
from django.views.generic import ListView, DetailView

class BookDetailView(DetailView):
    model = Book
    template_name = 'book_detail.html'
 
  • Мне нравится
Реакции: Student и LevikV

LevikV

Новичок
Пользователь
Июл 8, 2020
2
0
1
Да, все теперь работает, для детальной информации нужно было указать DetailView, спасибо!
А вот по имени шаблона я не совсем понял, если я его явно не указываю, он автоматически из имени представления его формирует?
 

Форум IT Специалистов