下午好!我正在尝试解决此问题,但是我自己解决该问题的所有尝试仅导致将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'
答案 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
,不用括号。