2013-05-30 59 views
2

我有一個簡單的表單。每當我點擊提交,我得到一個空白頁。不知道我做錯了什麼。我是django的新手。我在這裏閱讀了幾個問題和答案,但我似乎無法解決這個問題。感謝您的幫助Django 1.5簡單表格

views.py

from django.views.decorators.csrf import csrf_exempt, requires_csrf_token, csrf_protect 
from django import http 
from django.http import HttpResponse, HttpResponseRedirect 
from django.conf import settings 

from contact import ContactForm 

from django.template import RequestContext, Context 

from django import forms 
from django.core.mail import send_mail, BadHeaderError 
from django.shortcuts import render_to_response, get_object_or_404 
from django.core.context_processors import csrf 

@csrf_protect 
def contactview(request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = ContactForm(request.POST) 
     #return HttpResponse('Invalid header found.') I edited and removed this 
     if form.is_valid(): 
      subject = form.cleaned_data['subject'] 
      name = form.cleaned_data['name'] 
      sender = form.cleaned_data['sender'] 
      message = "The following feedback was submitted from %s \n\n" % (sender) 
      message += form.cleaned_data['message'] 
      recipients = ['[email protected]'] 
      cc_myself = form.cleaned_data['cc_myself'] 
      if cc_myself: 
       recipients.append(sender) 
      try: 
       send_mail(subject, message, sender, recipients, fail_silently=False) 
       return HttpResponseRedirect('/thankyou/') 
      except BadHeaderError: 
       return HttpResponse('Invalid header found.') 
    else: 
     form = ContactForm() 

    return render_to_response('contact.html', {'form': form}, context_instance=RequestContext(request)) 

contact.py

from django import forms 

# A simple contact form with five fields. 
class ContactForm(forms.Form): 
    subject = forms.CharField(max_length=100) 
    name = forms.CharField(max_length=100) 
    message = forms.CharField(widget=forms.Textarea()) 
    sender = forms.EmailField() 
    cc_myself = forms.BooleanField(required=False) 

在我的模板

<form action="" 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_sender">Name:</label></th> 
     <td><input class="text" type="text" name="name" id="id_name" /></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="10" cols="35" /></textarea></td></tr> 
    <tr><th><label for="id_cc_myself">Cc myself:</label></th> 
     <td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr> 
    <tr><td></td><td><input class="button" type="submit" value="Send" /></td></tr> 
</form> 
</table> 
</div> 
+1

歡迎Django的。我建議首先通過http://djangobook.com/上的一些教程進行工作。 – Brandon

+0

謝謝@brandon,我看了這本書。我已經看過他們的例子,這是非常類似於其他例子在stackoverflow ...仍然我得到了相同的結果。 – optimcode

+0

你的設置文件中是否有'DEBUG = True'?問題發生在本地開發中,還是僅在部署項目時發生,或兩者兼而有之? – technivore

回答

1

我認爲這個問題是這樣的:

return HttpResponse('Invalid header found.') 

在您實例化窗體之後。刪除該行並執行應該正常繼續。

+0

謝謝technivore。我曾在那裏測試是否會得到「找到無效的頭文件」。如果發佈了任何內容。我沒有收到消息,只是一個空白頁面(contact.html) – optimcode

1

在urls.py中,視圖函數被視爲「基於類的視圖」。爲了使用post/get in一個基於類的視圖,你必須定義一個方法來告訴視圖類如何處理post請求。

但是,在您的views.py中,視圖函數不是基於類的視圖,它只是一個視圖函數。所以我改變了urls.py中的URL來表示它只是一個函數,而不是一個類。

欲瞭解更多信息,你可以看到這篇https://docs.djangoproject.com/en/dev/topics/class-based-views/

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