2011-04-17 70 views
2

我遇到了此錯誤的牆。我敢肯定,我俯瞰一些基本的東西,似乎無法推測出來......Django查看值錯誤

ValueError at /sing/register 

The view sing.singer.views.grade didn't return an HttpResponse object. 

視圖文件...

from django.shortcuts import render_to_response 
from django import forms 
from django.http import HttpResponseRedirect 
from django.template import Template, RequestContext 
from dash.forms import GradeForm 


def register(request): 
    if request.method == 'POST': 
     form = GradeForm(data=request.POST) 
     if form.is_valid(): 
      new_dash_profile = form.save() 
      new_user = form.save() 
      return HttpResponseRedirect("/success/") 
     else: 
      form = RegisterForm() 
     return render_to_response('grade.html',{'form':form},context_instance=RequestContext(request)) 

我urls.py

urlpatterns = patterns('dashboard.dash.views', 
(r'^sing/register','register'),) 

我settings.py

TEMPLATE_DIRS = (
    "/home/django/testing/sing/grade/templates",) 

回答

4
def register(request): 
    if request.method == 'POST': 
     form = GradeForm(data=request.POST) 
     if form.is_valid(): 
      new_dash_profile = form.save() 
      new_user = form.save() 
      return HttpResponseRedirect("/success/") 
    else: 
     form = RegisterForm() 
    return render_to_response('grade.html',{'form':form},context_instance=RequestContext(request)) 

您的縮進看起來如何?

最初你用請求!='POST'進入視圖,它永遠不會到達底部的else語句,所以你不會得到一個HttpResponse。

另一件看起來很奇怪的事情是,即使你修復了你的縮進,你最初顯示了RegisterForm,並且在發佈請求之後,你把你的RegisterForm中的數據放入了一個GradeForm中,如果這不能證明你顯示了通過您的GradeForm添加到您的模板中。這是你的意圖嗎?

也是在你的urls.py我想補充/到:

(r'^sing/register','register'),) 

,如:

(r'^sing/register/','register'),) 

,除非你想讓它匹配(例如):

www.site.com/sing/registerasdf/ 

我甚至可以建議像這樣在最後使用'/ $':

(r'^sing/register/$','register'),) 

防止火柴(例如):

www.site.com/sing/register/asdf/asdf/asdf/ 
www.site.com/sing/register/asdf/asdf/ 
www.site.com/sing/register/asdf/ 
+0

哇。這確實是縮進!全金髮時刻!謝謝@DTing! – Eva611 2011-04-18 00:34:59

1

從鱈魚看e,它不返回HttpResponse的唯一時間是它不是POST請求。也許你正在做一個GET?

編輯:至於反對票:是的,我的回答不是很全面(沒有指出錯位的縮進),但它指出了實施邏輯中的謬誤。

+0

+1這個答案是正確的,沒有任何的HttpResponse時request.method沒有張貼。 – DTing 2011-04-18 00:39:30

0

我認爲它的HttpResonseRedirect。我不能說我經常使用它(如果有的話)。如果我是你,我會嘗試快捷redirect

http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect

+0

http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponseRedirect – DTing 2011-04-17 23:48:15

+0

@DTing這很有趣,我不知道你想說什麼。 – 2011-04-17 23:59:21

+0

對不起,因爲他只是傳遞一個URL,所以他沒有理由使用重定向快捷方式。 – DTing 2011-04-18 00:04:24