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

时间:2010-06-21 13:26:14

标签: django http view response

我有一个简单的视图,我正在保存表格。  代码似乎“干净”,但我无法摆脱错误:“视图没有返回一个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))  

谢谢!

3 个答案:

答案 0 :(得分:26)

验证代码的缩进

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

如果是获取请求,则呈现未绑定的表单

如果是发布请求且无效表单呈现绑定表单

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

答案 1 :(得分:6)

所有视图函数都必须返回某种HttpResponse对象。您的函数中存在一个代码路径,而是返回None。这将在request.method != 'POST'时发生,您只需“退出函数的末尾”(将返回None)。

答案 2 :(得分:0)

如果您使用的是 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