2

我创建了一个模型表单,然后context processor在每个页面上都包含该表单。提交表单后,它应该重定向到“谢谢”页面。然而,它似乎只是重新加载页面并删除表单。通过 URL 在页面上呈现时,我已经完成了所有工作。由于将函数移动到我的上下文处理器,它不会正确重定向。

它还将提供到模型中的信息保存在管理员中。所以我猜这与重定向有关。

这是我的上下文处理器:

from django.conf import settings
from contact_enquiries import forms

from django.shortcuts import render
from django.http import HttpResponseRedirect


def contact(request):
    if request.method == 'POST':
        form = forms.ContactUsForm(request.POST)

        if form.is_valid():

            form.save()

        return HttpResponseRedirect('/thanks/')

    else:
        form = forms.ContactUsForm()

        return {
                  'contact_form' : form,
        }

表格.py

class ContactUsForm(ModelForm):
    class Meta:
        model = ContactUs
        fields = ['name', 'contact_number', 'email', 'enquiry']

模型.py

class ContactUs(models.Model):
    name = models.CharField(max_length=200)
    contact_number = models.IntegerField(max_length=50)
    email = models.EmailField(max_length=300)
    enquiry = models.TextField()

    class Meta:
        verbose_name_plural = "Contact Us"


    def __unicode__(self):
        return self.name
4

1 回答 1

1

上下文处理器应该总是返回一个字典,它不应该返回一个 http 响应。

一种选择是将您的联系表发布到不同的视图。您可以通过更改action模板中表单的属性来完成此操作。

<form action="{% url 'contact' %}" method="post">

您的联系人视图和 url 模式如下所示:

url('^/contact/$', contact, name="contact"),

def contact(request):
    if request.method == 'POST':
        form = forms.ContactUsForm(request.POST)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/thanks/')

    else:
        form = forms.ContactUsForm()

    return render(request, "contact.html", {
              'contact_form' : form,
    })

然后,您的上下文处理器简化为:

def contact(request):
    form = forms.ContactUsForm()
    return {'contact_form' : form}
于 2013-10-16T17:56:23.467 回答