django - Django:在列表视图中包含一个表单
问题描述
我正在尝试将时事通讯注册表单插入到我的 base.html 模板中,该模板是一个列表视图,显示即将发生的事件和特色商店,每次我提交表单时它都会返回“HTTP 错误 405”
对此的任何帮助将不胜感激
视图.py
from django.shortcuts import render
from django.views.generic import ListView, TemplateView
from events.models import Event
from newsletter.forms import NewsletterSignUpForm
from shops.models import Shop
class HomeListView(ListView):
template_name = 'core/index.html'
def get_context_data(self, **kwargs):
context = super(HomeListView, self).get_context_data(**kwargs)
context.update({
'events': Event.get_upcoming_events()[:1], # returns only the first event in the list
'shops': Shop.objects.all(),
})
context['newsletter_form'] = NewsletterSignUpForm()
return context
def get_queryset(self):
return None
表格.py
from django.forms import ModelForm
from .models import Newsletter
class NewsletterSignUpForm(ModelForm):
class Meta:
model = Newsletter
fields = ['email']
模型.py
from django.db import models
class Newsletter(models.Model):
email = models.EmailField(unique=True)
date_subscribed = models.DateTimeField(auto_now=False, auto_now_add=True)
def __str__(self):
return f'{self.email}'
base.html
<form method="post">
{% csrf_token %}
{{ newsletter_form|crispy }}
<button class="btn btn-primary" type="submit">Sign Up!</button>
</form>
解决方案
首先在表单中添加action url来处理post数据
<form method="post" action="{% url 'submit_url' %}">
{% csrf_token %}
{{ newsletter_form|crispy }}
<button class="btn btn-primary" type="submit">Sign Up!</button>
</form>
网址.py
添加网址
path('your_url',views.formSubmit,name='submit_url')
视图.py
def formSubmit(request):
if request.method == 'POST':
form = NewsletterSignUpForm(request.POST)
if form.is_valid():
form.save()
return redirect('your_list_view_url')
或者您可以与基于类的FormMixin
视图一起使用
formmixin 和基于类的视图
推荐阅读
- reactjs - RxJS 丢弃重复请求
- c - c静态分析计算加载和存储指令
- toolchain - 究竟什么是工具链?
- sql - 获取所有员工逾期的所有项目 - SQL 查询
- java - Spring Boot 2 Hibernate 5 @Embeddable 属性在 H2 中生成错误的字段大小(create-drop)
- haskell - Haskell,typesig Map.Map,LYAH
- java - 接口是否提供完整的抽象?如何?
- bash - 如何使用环境变量集自动调用脚本
- php - 当 laravel 中的单元测试失败时,响应不是视图消息
- sql - 连接两个表后使用 NOT IN 关键字