【问题标题】:Django didn't return an HttpResponse objectDjango 没有返回 HttpResponse 对象
【发布时间】:2025-12-10 19:55:02
【问题描述】:

我做了一个简单的宠物商店应用程序,刚刚添加了搜索框功能,我收到了这个错误

ValueError at /pet/search/
The view mysite.pet.views.search_page didn't return an HttpResponse object.

我尝试将 render_to_response 更改为 HttpResponseRedirect 但仍然出现相同的错误。

在视图中链接回我的 search_page 功能。

def search_page(request):
    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})
        else:
            return render_to_response("search.html",{"form":form} , context_instance = RequestContext(request))

我做了一些研究,我知道视图必须在发出 HttpRequest 时返回 HttpResponse,而 render_to_response 只是一个快捷方式。有人可以帮助解释为什么这个函数不起作用。谢谢

【问题讨论】:

  • 简单:如果request.method 不等于"POST",则此函数不返回任何内容(假设这是整个函数)。
  • 不,够了。你看到问题了吗?
  • 是的,因为如果 request.method 是 false 。它不返回任何东西
  • 您的else 子句是主要if 子句的一部分,这是错误的。因此,您不返回任何内容(因此绝对没有 HttpResponse)。只需将 else 子句缩进即可。

标签: django


【解决方案1】:

如果请求类型不是POST,您没有编写HttpResponse object,因此您遇到了这个问题

要在您的观点中克服这个问题,请编写在请求类型未发布时将处理的内容

def search_page(request):
    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})



    return render_to_response("search.html",{"form":form} , context_instance = RequestContext(request))

希望对你有帮助,谢谢

【讨论】:

  • 你有两个相同的 render_to_response 调用——第一个是多余的。您可以删除 else 语句,并在最后保留一个调用。
  • @masterofdestiny 抱歉。它说等待 4 分钟接受答案然后我忘了它
【解决方案2】:

错误是因为调用函数时方法类型不是POST,没有找到对应的HttpResponse对象。

def search_page(request):
    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})
        else:
            return render_to_response("search.html",{"form":form} , context_instance = RequestContext(request))

    return render_to_response("any.html",{} , context_instance = RequestContext(request))

【讨论】:

    【解决方案3】:

    def 添加响应者(请求): 如果 request.method == 'POST': # return HttpResponse(request,'error is here')

        if (request.POST.get('firstname') and
                request.POST.get('lastname') and
                request.POST.get(' email') and
                request.POST.get('phone_Number') and
                request.POST.get('gender') and
                request.POST.get('state') and
                request.POST.get('adress') and
                request.POST.get('postal_code') and
                request.POST.get('town')
                ):
                fname = request.POST.get('firstname')
                lname =  request.POST.get('lastname')
                em = request.POST.get(' email')
                phn = request.POST.get('phone_Number')
                gnd = request.POST.get('gender')
                stt = request.POST.get('state')
                add =  request.POST.get('adress')
                pstc = request.POST.get('postal_code')
                twn = request.POST.get('town')           
    
                try:
                    sponser = Sponsers()
                    sponser.firstname = fname
                    sponser.lastname = lname
                    sponser.email = em
                    sponser.Phone_Number = phn
                    sponser.gender = gnd
                    sponser.state = stt
                    sponser.adress = add
                    sponser.postal_code = pstc
                    sponser.town = twn
                    sponser.save()               
                    
                    messages.success(request, "sponser Added")
                    return redirect('sponsers')
                except Exception:
                    messages.error(request, "Failed to add sponser")
                    return redirect('sponsers')
        else:           
            pass
    else:
        return redirect('sponsers')
    

    【讨论】: