2012-01-04 12 views
1

私のアプリで検証がうまくいかない理由がわかりません。なぜ検証が機能しないのですか? Django Forms

私の問題は、私は私のテンプレート(base_contact.html)でフォームを送信するたびに、アプリが/感謝/ビューに私を送りますが、それもフォーム場合ありませんので、それは、とても奇妙だということですテンプレートの空白またはいくつかの検証エラーがあります。だから、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 = ['[email protected]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> 

感謝:)

+2

'return HttpResponseRedirect( '/ Thanks /')'のインデントは、あなたのコードでまったく同じですか?あなたがここに投稿したものは、私には正しいように見えます。 – Alasdair

+0

はい、これは同じですが、興味があります。この行を#でコメントすると、テンプレートページのすべてのエラーが表示されます。もちろん、フォームは送信されません。 – javidgon

+3

is_valid ifに関連付けられたelseでエラーを表示しようとしましたか? alasdairが言ったように、sendmailの閉じ括弧に戻るまで空白を削除してからEnterを押す(改行に行く) –

答えて

1

チェック:これらは私のファイルです次のインデントline

return HttpResponseRedirect('/Thanks/') 

インデントは非常に重要です。インデントレベルごとに4つのスペースを使用するのはrecommendedです。タブの使用は避けてください。テキストエディタまたはideの設定を変更して、タブキーを押したときに4つのスペースを使用することがよくあります。

関連する問題