为什么验证没有';不行?Django表格

为什么验证没有';不行?Django表格,django,forms,validation,Django,Forms,Validation,我不明白为什么验证在我的应用程序中不起作用 我的问题是,每次我在我的模板(base_contact.html)中发送表单时,应用程序都会将我发送到/Thank/view,但这太奇怪了,因为即使模板中的表单为空或存在多个验证错误,它也会这样做。所以我认为form.is_valid()在这种情况下不能正常工作。这些是我的文件: models.py from django.db import models from django import forms class ContactForm(form

我不明白为什么验证在我的应用程序中不起作用

我的问题是,每次我在我的模板(base_contact.html)中发送表单时,应用程序都会将我发送到/Thank/view,但这太奇怪了,因为即使模板中的表单为空或存在多个验证错误,它也会这样做。所以我认为form.is_valid()在这种情况下不能正常工作。这些是我的文件:

models.py

from django.db import models
from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea())
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)
views.py

from django.shortcuts import render_to_response
from django.core.context_processors import csrf
from django.http import HttpResponseRedirect
from main.models import ContactForm
from django.core.mail import send_mail

def contact(request):
if request.method == 'POST': # If the form has been submitted...
    form = ContactForm(request.POST) # A form bound to the POST data
    if form.is_valid(): # All validation rules pass
        # Process the data in form.cleaned_data
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        sender = form.cleaned_data['sender']
        cc_myself = form.cleaned_data['cc_myself']
        recipients = ['example@gmail.com']

        send_mail(subject, message, sender, recipients)
        return HttpResponseRedirect('/Thanks/') # Redirect after POST
else:
    form = ContactForm() # An unbound form
return render_to_response('base_contact.html', {'form': form})
base_contact.html

<div class="forms">
<table>
<form action="/Contact/" method="post">{% csrf_token %}
    <tr><th><label for="id_sender">Your email:</label></th>
        <td><input class="text" type="text" name="sender" id="id_sender" /></td></tr>
    <tr><th><label for="id_subject">Subject:</label></th>
        <td><input class="text" id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
    <tr><th><label for="id_message">Message:</label></th>
        <td><textarea class="styletextarea" name="message" id="id_message" rows="7" cols="35" /></textarea></td></tr>
    <tr><td></td><td><input class="button" type="submit" value="Send" /></td></tr>
</form>
</table>
</div>

{%csrf_令牌%}
您的电子邮件:
主题:
信息:

谢谢您的帮助:)

检查下一行的缩进

return HttpResponseRedirect('/Thanks/')

在Python(因此也是Django)中,缩进非常重要。每个缩进级别使用4个空格。避免使用标签。当您按tab键时,您可以经常更改文本编辑器或ide的设置以使用4个空格。

在您的代码中,返回HttpResponseRedirect('/Threak/')的缩进是否与上述缩进完全相同?你在这里发布的内容在我看来是正确的。是的,它是一样的。。。但奇怪的是,如果我用#注释这一行,我会得到模板页面中的所有错误。但是表单当然不会被发送。您是否尝试过用与相关联的else显示错误?如果有效,是否有效?正如阿拉斯代尔所说,请尝试重新标识该行(删除空格,直到将return附加到sendmail的右括号中,然后按enter键(即转到新行)。天哪,这就是问题所在:)非常感谢。我发现在Django,缩进可能是个大问题。