2012-10-26 61 views
2

我已經使用了Django窗體。我有這個功能views.py當窗體無效時,視圖沒有返回HttpResponse對象錯誤:django

def func(request): 
    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      //do processing    
      return HttpResponseRedirect('/') 
    else: 
     form = MyForm() 
     return render_to_response("checkbox.html", RequestContext(request, {'form':form})) 

但當形式是無效的,這說明我的錯誤:The view didn't return an HttpResponse object.我已經搜查每實現其視圖功能是這樣的,但我不知道爲什麼我的有錯誤。它似乎不知道該怎麼辦,而形式無效!爲什麼它不顯示頁面和顯示用戶的表單錯誤?你能幫我麼?

回答

4

當窗體是無效的,認爲只是因爲的else一部分返回if語句只計算了當request.method == "POST"False,它是不...

爲了解決這個問題,以下是常用的用於製作表單視圖的模式:

def func(request): 
    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      //do processing    
      return HttpResponseRedirect('/') 
    else: 
     form = MyForm() 

    # outside of the else clause 
    # if the form is invalid, then it will also show the error messages to the user 
    return render_to_response("checkbox.html", RequestContext(request, {'form':form})) 
+0

啊哈,你說得對。真的非常感謝:) – user1597122

+0

@ user1597122將其標記爲已接受!它有助於過濾! – dokkaebi

3

您已在@ miki725發表了您的答案。只是一個建議,你可能要考慮GET作爲默認行爲,以避免那些if .. else

def func(request): 
    # GET is the default behaviour 
    form = MyForm() 

    if request.method == "POST": 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      //do processing    
      return HttpResponseRedirect('/') 

    return render_to_response("checkbox.html", RequestContext(request, {'form':form})) 
+1

非常感謝:) – user1597122

+0

基於類的視圖使這真的很好,乾淨... https://docs.djangoproject.com/en/1.6/topics/class-based-views/ – nicorellius

相關問題