【问题标题】:Django "The view didn't return an HttpResponse object."Django“视图没有返回 HttpResponse 对象。”
【发布时间】:2011-03-06 07:54:11
【问题描述】:

我有一个保存表单的简单视图。代码看起来很“干净”,但我无法摆脱错误:

“视图没有返回 HttpResponse 对象。”

虽然我在网上搜索过,但没有找到相关的迹象。

def classroom_privacy(request,classname):
         theclass = Classroom.objects.get(classname=classname)
     if request.method == 'POST':  
       form = PrivacyClass(request.POST)
       if form.is_valid():
           new_obj = form.save(commit=False)
           new_obj.save()
           return HttpResponseRedirect('.')    
       else:
           form = PrivacyClass()     
       return render_to_response('classroom/classroom_privacy.html', {'form': form}, 
          context_instance=RequestContext(request))

【问题讨论】:

  • 小问题:你发送了一个 POST 请求?
  • 路人:“你忘了return回复吗?”

标签: django http view response


【解决方案1】:

验证代码的缩进

def classroom_privacy(request, classname):
    theclass = Classroom.objects.get(classname=classname)
    if request.method == 'POST':
        form = PrivacyClass(request.POST)
        if form.is_valid():
            new_obj = form.save(commit=False)
            new_obj.save()
            return HttpResponseRedirect('.') 
    else:
        form = PrivacyClass()  

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

如果是get请求,渲染一个未绑定的表单

如果是 post 请求且表单无效,则呈现绑定表单

如果是post请求且有效表单重定向页面

【讨论】:

  • 你是对的。我实际上有压痕问题!谢谢!
  • 这是正确的,突然之间,验证正在工作
  • 不知何故我设法在我的 forms.py 中出现了相同的缩进错误,非常感谢!
【解决方案2】:

所有视图函数都必须返回某种 HttpResponse 对象。您的函数中存在一个代码路径,其中将返回 None。这将在 request.method != 'POST' 发生时发生,并且您将简单地“从函数的末尾掉下来”(这将返回 None)。

【讨论】:

  • 是的。你说的对。我的问题更微不足道,虽然我看不到。我有一个缩进问题,'else' 被解释为第二个 if。非常感谢您的关注! :)
【解决方案3】:

如果您使用的是 Django Rest 框架。使用以下代码返回 HTTP 响应 以解决此问题。

from django.http import HttpResponse

def TestAPI(request):
    # some logic
    return HttpResponse('Hello')

JSON 响应返回示例:

def TestAPI(request):
    your_json = [{'key1': value, 'key2': value}]
    return HttpResponse(your_json, 'application/json')

有关 HttpResponse 的更多详细信息: https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpResponse

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多