NoReverseMatch: Reverse for 'book-detail' not found. 'book-detail' is not a valid view function or pattern name

Рейтинг: 2Ответов: 2Опубликовано: 23.02.2023

Такая проблема: повторял код с книги и дошел до момента, где надо было указать ссылку на страницу, которая загружает список данных с БД. При переходе получаю вот такую ошибку:

django.urls.exceptions.NoReverseMatch: Reverse for 'book-detail' not found. 'book-detail' is not a valid view function or pattern name.

Так же показывает на вот эту строчку: введите сюда описание изображения

{% extends "base_generic.html" %}

{% block content %}
    <h1>Список книг в БД</h1>
    {% if book_list %}
    <ul>
        {% for book in book_list %}
        <li>
            <a href="{{ book.get_absolute_url }}">{{ book.title }}</a>
            ({{book.genre}})
        </li>
        {% endfor %}
    </ul>
    {% else %}
        <p>В базе данных нет книг</p>
    {% endif %}
{% endblock %}

Мне не очень понятно почему, так, единственное может быть то что вместо urls, я указал path. Поставить urls не мог, так как в библиотеки его убрали. введите сюда описание изображения

from django.contrib import admin
from django.urls import path, re_path
from catalog import views

urlpatterns = [
    path('', views.index, name='index'),
    path('admin/', admin.site.urls),
    path(r'^books/$', views.BookListView.as_view(), name='books'),
]

Так же не знаю, может ругается на модель в которой есть один метод: введите сюда описание изображения

def get_absolute_url(self):
    # Возвращает URL-адрес для доступа к определенному экземпляру книги.
    return reverse('book-detail', args=[str(self.id)])

Может кто подсказать как решить эту проблему?

P.S. Добавлен код с картинок.

После добавления в urls.py:

path('book-detail/', views.BookDetailView.as_view(), name='book-detail'),

А также класс BookDetailView в файле views.py:

class BookDetailView(generic.DetailView):
    model = Book

Я получил новую ошибку:

NoReverseMatch: Reverse for 'book-detail' with arguments '('1',)' not found. 1 pattern(s) tried: ['book\-detail/\Z']

введите сюда описание изображения

введите сюда описание изображения

Ответы

▲ 1Принят

вам надо передать id конкретной книги

path('book-detail/<int:pk>', views.BookDetailView.as_view(), name='book-detail'),
▲ 1

Вам не хватает пути к book-detail.

urlpatterns = [
    path('', views.index, name='index'),
    path('admin/', admin.site.urls),
    path(r'^books/$', views.BookListView.as_view(), name='books'),
    path('book-detail/', views.BookDetailView.as_view(), name='book-detail'),
]