【发布时间】:2020-05-10 21:00:21
【问题描述】:
我正在尝试在 django 应用程序中制作电子邮件提交表单。虽然来自 Flask,但我有点困惑,因为我试图用基于类的视图来做到这一点,但我很卡住。
我目前收到此错误,但不确定如何使其成功发布
Method Not Allowed (POST): /newsletter/
Method Not Allowed: /newsletter/
我的模型课有这个
class Newsletter(models.Model):
email = models.CharField(max_length=200, unique=True)
我的 forms.py 有这个
from django import forms
class NewsletterForm(forms.Form):
email = forms.CharField(max_length=200)
def send_email(self):
# send email using the self.cleaned_data dictionary
pass
我的 urls 文件有这个
path('newsletter/', views.NewsletterView.as_view(), name='newsletter'),
我在html中提交的表单是这样的
<form action="/newsletter/" method="post">{% csrf_token %}
<label for="email">Email: </label>
<input id="email" type="email" name="email_field" placeholder="email@example.com">
<input type="submit" value="Subscribe">
</form>
这里是视图函数
from django.views import generic
from .models import Post
from blog.forms import NewsletterForm
class PostList(generic.ListView):
queryset = Post.objects.filter(status=1).order_by('-created_on')
template_name = 'index.html'
paginate_by = 3
class PostDetail(generic.DetailView):
model = Post
template_name = 'post_detail.html'
class NewsletterView(generic.TemplateView):
template_name = "newsletter.html"
form_class = NewsletterForm
success_url = '/thanks/'
def form_valid(self, form):
# This method is called when valid form data has been POSTed.
# It should return an HttpResponse.
form.send_email()
return super().form_valid(form)
【问题讨论】:
-
您可以添加您的视图吗?
-
您的视图似乎不适合
POST。 -
@IainShelvington 添加了
-
@nadermx 你应该使用 FormView 而不是 TemplateView
-
@IainShelvington 有效,如果你想回答我会选择它
标签: django django-class-based-views