django 视图未返回HttpResponse对象,它返回了None

uqdfh47h  于 2022-11-18  发布在  Go
关注(0)|答案(7)|浏览(195)

我有下面的简单视图。为什么会导致这个错误?
The view auth_lifecycle.views.user_profile didn't return an HttpResponse object. It returned None instead.

"""Renders web pages for the user-authentication-lifecycle project."""
from django.shortcuts               import render
from django.template                import RequestContext
from django.contrib.auth            import authenticate, login

def user_profile(request):
    """Displays information unique to the logged-in user."""

    user = authenticate(username='superuserusername', password='sueruserpassword')
    login(request, user)

    render(request, 'auth_lifecycle/user_profile.html',
           context_instance=RequestContext(request))
hk8txs48

hk8txs481#

因为视图必须返回render,而不仅仅是调用它。(注意,renderHttpResponse的简单 Package 器)。

return render(request, 'auth_lifecycle/user_profile.html',
           context_instance=RequestContext(request))

(Also注意render(...)函数在后台返回一个HttpResponse对象。)

wlzqhblo

wlzqhblo2#

if qs.count()==1:
        print('cart id exists')
        if ....

else:    
        return render(request,"carts/home.html",{})

这种类型的代码也会返回相同的错误,这是因为return语句应该是else语句,而不是if语句。
以上代码可以更改为

if qs.count()==1:
        print('cart id exists')
        if ....

else:   

return render(request,"carts/home.html",{})

这样可以解决这些问题

nhhxz33t

nhhxz33t3#

我 在 使用 UpdateView 时 遇到 了 同样 的 错误
我 有 这个 :

if form.is_valid() and form2.is_valid():
    form.save()
    form2.save()
    return HttpResponseRedirect(self.get_success_url())

中 的 每 一 个
我 解决 了 这个 问题 :

if form.is_valid() and form2.is_valid():
    form.save()
    form2.save()
    return HttpResponseRedirect(reverse_lazy('adopcion:solicitud_listar'))

格式

bvjxkvbb

bvjxkvbb4#

我知道这是很晚才张贴的东西在这里,但这可能有助于有人找出愚蠢的错误。
有可能你在render()之前错过了return。请确保这一点。

rks48beu

rks48beu5#

Python对缩进非常敏感,用下面的代码我得到了同样的错误:

except IntegrityError as e:
        if 'unique constraint' in e.args:
            return render(request, "calender.html")

正确的缩进为:

except IntegrityError as e:
        if 'unique constraint' in e.args:
        return render(request, "calender.html")
mwyxok5s

mwyxok5s6#

我有同样的问题,但通过在保存数据后返回渲染解决了它。

error_message = None
    if not first_name:
        error_message = "first name is required!!!!"
    elif len(first_name) < 4:
        error_message = "first name must be more than 4 characters!!!"

    elif not error_message:
        signup_obj = Signuup(firstname=first_name, lastname=last_name, email=email, password=password)
        print("here is the complete object!!!!")

        signup_obj.register()
        

    else:
        return render(request, 'signup.html', {'error': error_message})

问题:保存数据后,如果没有任何error_message可显示,但保存后没有返回任何内容。
解决方法添加后错误已解决

signup_obj.register()
  return render(request, 'signup.html')

在代码中...

pqwbnv8z

pqwbnv8z7#

在Django中,每个视图都必须返回一个**HttpResponse(或者它的子类)。但是,我们通常在渲染Django中的模板时使用render(...)函数。如果我们使用render(...)函数,我们不会遇到任何错误,因为render(...)在内部返回一个HttpResponse
对于这个特定的例子,您缺少一个
*return语句,因此视图确实返回了None***,这导致了异常。
因此,添加return语句将解决此问题,如下所示

def user_profile(request):
    # your code
    return render(...)
    ^^^^^^

故障排除

许多人面临这个问题;它们的代码/逻辑可能不同,但原因是相同的。下面是一些可能有助于您排除故障的情况,
1.您是否遗漏了添加return语句?

def user_profile(request):
    HttpResponse("Success")  # missing a `return` here

1.您确定返回的对象是HttpResponse还是它的子类?有些人可能会直接从视图返回模型对象或表单对象

def user_profile(request):
    my_model_object = MyModel.objects.get(pk=request.GET.get('id'))
    # at last, return a model instance
    return my_model_object

1.是否所有的if...else子句都正确地返回HttpResponse?(在下面的示例中,不清楚应该返回什么,
a.在form.is_valid()False的情况下
B.如果form.is_valid()True(在form.save()之后)

def user_profile(request):
    if request.method == "POST":
        form = UserProfileForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
    else:
        return render(
            request,
            "user_profile.html",
            {"form": UserProfileForm(instance=request.user)},
        )

相关问题