AttributeError:“功能”对象没有属性“ as_view”。怎么了?

时间:2020-08-08 09:49:23

标签: python python-3.x django

下午好!我正在尝试解决此问题,但是我自己解决该问题的所有尝试仅导致将def更改为class,但这无济于事。你能告诉我问题出在哪里吗?

views.py

from django.core.mail import send_mail, BadHeaderError
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect
from .models import Form

def FormListView(request):
    if request.method == 'GET':
        form = FormListView()
    else:
        form = FormListView(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            surname = form.cleaned_data['surname']
            email = form.cleaned_data['email']
            try:
                send_mail(name, surname, email, ['kirill_popov_000@mail.ru'])
            except BadHeaderError:
                return HttpResponse('Invalid')
            return redirect('success')
    return render(request, "index.html", {'form': form})

def Success(request):
    return HttpResponse('Success!')

urls.py

from django.urls import path
from .views import FormListView

urlpatterns = [
    path('', FormListView.as_view(), name = 'home'),
    path('success/', Success.as_view(), name = 'success')
]

错误:

  File "/home/user/Portfolio/web_project/web_page/urls.py", line 5, in <module>
    path('', FormListView.as_view(), name = 'home'),
AttributeError: 'function' object has no attribute 'as_view'

2 个答案:

答案 0 :(得分:1)

您使用的是函数而不是基于类的View。看看这个reference

基于功能

如果您使用的是函数,则基本上可以编写(可以更改为约定的函数小写形式)。

path('', FormListView(), name = 'home'),

基于类

例如,如果您有一个基于类的视图,例如:

from django.views.generic import TemplateView

class AboutView(TemplateView):
#...

然后您可以像这样使用as_view():

path('about/', AboutView.as_view()),

答案 1 :(得分:0)

它们是函数而不是基于类的视图。在基于类的视图中,在名称后键入.as_view(),但是在基于函数的视图中,只需键入FormListView,不用括号。