Djnago : AttributeError: модуль 'django.views.generic' не имеет атрибута 'Detail'

Откуда я могу импортировать атрибут детализации?

views.py:

from django.shortcuts import render
from django.views import generic

from . import models

class Index(generic.TemplateView):

   template_name='catalog/index.html'

   def get_context_data(self, **kwargs):
       context = super().get_context_data(**kwargs)
       context['num_books'] = models.Book.objects.all().count()
       context['num_instances'] = models.BookInstance.objects.all().count()
       context['num_instances_available'] = models.BookInstance.objects.filter(status__exact='a').count()
       context['num_authors'] = models.Author.objects.count()

       return context

class BookListView(generic.ListView):

   model = models.Book
   template_name = 'catalog/book_list.html'

class BookDetialView(generic.Detail.View):

   model= models.Book
   template_name = 'catalog/book_detail.html'

urls.py

from django.urls import include, path, re_path
from . import views
from django.views.generic import TemplateView


app_name='catalog'
urlpatterns = [
   path(r'', views.Index.as_view(), name='index'),
   re_path(r'^$', views.Index.as_view(), name='index')
]

urlpatterns = [
   path(r'^$', views.index, name='index'),
   path(r'^books/$', views.BookListView.as_view(), name='books'),
   path(r'^book/(?P<pk>\d+)$', views.BookDetailView.as_view(), name='book-detail'),
]

но результат:

class BookDetialView(generic.Detail.View):

AttributeError: модуль 'django.views.generic' не имеет атрибута 'Detail'

Должно быть generic.DetailView вместо generic.Detail.View

В вашем BookDetailView вы использовали generic.Detail.View вместо DetailView[Djano-doc].

Измените свой BookDetailView как

from django.views import generic

class BookDetialView(generic.DetailView): #<---  change here

   model= models.Book
   template_name = 'catalog/book_detail.html'

У вас есть несколько проблем.

(1) В ваших представлениях вы пишете имя представления как BookDetialView, а в определении url вы пишете его BookDetailView.

(2) Я считаю, что правильное наследование - generic.DetailView вместо generic.Detail.View

Вернуться на верх