You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django报错AttributeError: module 'django.views.generic' has no attribute 'Detail'——Detail视图应从何处导入?

解决Django AttributeError: module 'django.views.generic' has no attribute 'Detail'

嘿,这个问题很常见,是因为你搞混了Django通用视图的类名和结构!

问题根源

你写的generic.Detail.View是错误的——Django的通用详情视图根本没有Detail这个子模块,正确的类名是**DetailView**,直接属于django.views.generic模块。另外你还把类名拼错了:BookDetialView应该是BookDetailView(少了一个a),这也会导致后面urls里调用BookDetailView.as_view()时报错。

修正步骤

  1. 修改views.py中的详情视图类
    把错误的类定义:
class BookDetialView(generic.Detail.View):
    model= models.Book
    template_name = 'catalog/book_detail.html'

改成:

class BookDetailView(generic.DetailView):
    model = models.Book
    template_name = 'catalog/book_detail.html'

这里做了两处修正:

  • 类名拼写:BookDetialView → BookDetailView
  • 继承的视图类:generic.Detail.View → generic.DetailView
  1. 修复urls.py的路由覆盖问题
    你在urls.py里定义了两次urlpatterns,第二次会完全覆盖第一次,导致最初的index路由失效。把所有路由合并到一个urlpatterns列表里:
from django.urls import path
from . import views

app_name='catalog'
urlpatterns = [
    path('', views.Index.as_view(), name='index'),
    path('books/', views.BookListView.as_view(), name='books'),
    path('book/<int:pk>/', views.BookDetailView.as_view(), name='book-detail'),
]

另外推荐用Django 2.0+的path语法代替re_path,更简洁直观(比如<int:pk>代替(?P<pk>\d+))。

补充说明

Django的通用视图都是直接以驼峰命名的类存在于django.views.generic下的,比如ListView、DetailView、CreateView等,没有嵌套的子模块结构,以后写的时候可以对照官方文档确认类名哦。

内容的提问来源于stack exchange,提问作者arshia_sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:07:37