【问题标题】:Django View Value ErrorDjango查看值错误
【发布时间】:2011-04-17 23:32:55
【问题描述】:

我遇到了这个错误。我确定我忽略了一些基本的东西,只是似乎无法弄清楚......

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' ),)

我的设置.py

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

【问题讨论】:

    标签: django django-views


    【解决方案1】:
    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) )
    

    你的缩进看起来不对?

    最初,您使用 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/
    

    【讨论】:

    • 哇。确实是缩进!总金发时刻!谢谢@DTing!
    【解决方案2】:

    从代码来看,唯一不返回 HttpResponse 的就是不是 POST 请求的时候。也许你正在做一个 GET 代替?

    编辑:至于否决票:是的,我的回答不是很全面(没有指出错位的缩进),但它指出了实施逻辑中的谬误。

    【讨论】:

    • +1 这个答案是正确的,当 request.method 没有发布时没有 HttpResponse。
    【解决方案3】:

    我认为这是您的HttpResonseRedirect。我不能说我经常使用它(如果有的话)。如果我是你,我会尝试快捷方式redirect

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

    【讨论】:

    • @DTing 这很有趣,我不确定你想说什么。
    • 对不起,因为他只是传递一个 URL,所以他没有理由使用重定向快捷方式。
    • @DTing 你可能是对的!.. 我也没有注意到你指出的缩进会有所作为。我只是碰巧喜欢捷径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2016-10-28
    • 1970-01-01
    • 2018-09-04
    • 2019-09-11
    相关资源
    最近更新 更多