首页 > 解决方案 > 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>

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-templates

解决方案


首先在表单中添加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 和基于类的视图


推荐阅读