我怎样才能让这个 "class-based view" 工作?

How can I make this "class-based view" work?

我一直在学习 Django,现在正在研究基于 class 的视图。我完全按照官方文档和初学者的书输入,但代码没有按照他们解释的那样工作。请告诉我为什么这不起作用。

命令提示符显示“文件“C:\Users\yuto1\Desktop\book_study\Tabelog\urls.py”,第 9 行,在 path("列表/", ReviewList.as_view(), name="ReviewList"), AttributeError: 'function' 对象没有属性 'as_view'"

urls.py

from django.urls import path,include
from Tabelog import views
from Tabelog.views import ReviewList

app_name = "Tabelog"

urlpatterns = [
    path("lp/", views.lp,name="lp"),
    path("list/", ReviewList.as_view(), name="ReviewList"),
    path("detail/<str:store_name>",views.detail,name="detail"),
    path("form/",views.form,name="form"),
    path("form/fix/<str:pk>",views.form_fix,name="form_fix")
]

views.py

from django.shortcuts import render,redirect,get_object_or_404
from Tabelog.models import Tabelog
from Tabelog.forms import CreateTabelogForm
from django.views.generic import ListView

# Create your views here.
def lp(request):
    return render(request,"Tabelog/lp.html")

def ReviewList(ListView):
    model = Tabelog

def detail(request,store_name):
    detail = Tabelog.objects.get(store_name = store_name)
    context = {
        "detail":detail,
    }
    return render(request,"Tabelog/detail.html",context)

def form(request):
    if request.method == "GET":
        form = CreateTabelogForm()
        context = {
            "form":form
        }
        return render(request,"Tabelog/form.html",context)

    else:
        form = CreateTabelogForm(request.POST or None)
        if request.method == "POST" and form.is_valid():
            form = CreateTabelogForm(request.POST)
            form.save(commit=True)
            return redirect("Tabelog:list")

        else:
            form = CreateTabelogForm()
            context = {
                "form":form
            }
            return render(request,"Tabelog/form.html",context)

def form_fix(request,pk):
    review = get_object_or_404(Tabelog,pk=pk)
    print("success one")
    form = CreateTabelogForm(request.POST or None,instance=review)
    print("success two")

    if request.method == "GET":
        form = CreateTabelogForm(instance=review)
        context = {
            "form":form
        }
        return render(request,"Tabelog/form_fix.html",context)

    else:
        if request.method == "POST" and form.is_valid():
            form.save()
            return redirect("Tabelog:list")

        else:
            form = CreateTabelogForm(instance=review)
            context = {
                "form":form
            }
            return render(request,"Tabelog/form_fix.html",context)

reviewlist_list.html

<!DOCTYPE html>
{% extends 'diary/base.html' %}
{% block content %}
{% for contents in object_list%}
<article class="store">
  <h1> <a href="{% url 'Tabelog:detail' contents.store_name %}">{{contents.store_name}}</a></h1>
  <h2>{{contents.get_stars_display}}</h2>
  <span>{{contents.outline}}</span>
</article>
{% endfor %}
{% endblock %}

在基于 class 的视图上工作时,您需要通过关键字 class 而不是 def 指定 class 名称(它用于基于函数的视图),更改您的代码如下图

class ReviewList(ListView):
    model = Tabelog