View 没有返回 HttpResponse 对象。它返回 None 而不是

Posted

技术标签:

【中文标题】View 没有返回 HttpResponse 对象。它返回 None 而不是【英文标题】:View didn't return an HttpResponse object. It returned None instead 【发布时间】:2016-08-08 01:32:58 【问题描述】:

下面的视图是在使用 POST 方法时给我的错误。我正在尝试将模型数据加载到表单中,允许用户编辑,然后更新数据库。当我尝试保存更改时,出现上述错误。

def edit(request, row_id):
    rating = get_object_or_404(Rating, pk=row_id)
    context = 'form': rating
    if request.method == "POST":
        form = RatingForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home.html')
    else:
        return render(
            request,
            'ratings/entry_def.html',
            context
        )

这是来自终端的跟踪。

[15/Apr/2016 22:44:11] "GET / HTTP/1.1" 200 1554
[15/Apr/2016 22:44:12] "GET /rating/edit/1/ HTTP/1.1" 200 919
Internal Server Error: /rating/edit/1/
Traceback (most recent call last):
   File "/Users/michelecollender/ENVlag/lib/python2.7/site-packages/django/core/handlers/base.py", line 158, in get_response
    % (callback.__module__, view_name))
ValueError: The view ratings.views.edit didn't return an HttpResponse object. It returned None instead.

【问题讨论】:

如果表单无效,则没有return 你能发布堆栈跟踪吗? @Eli 返回什么是合适的 HttpResponse? 【参考方案1】:

如果form.is_valid() 正在重定向,但表单无效怎么办?在这种情况下没有执行任何代码?没有代码。当函数没有显式返回值时,将给期望返回值的调用者None。因此错误。

你可以试试这样的:

def edit(request, row_id):
    rating = get_object_or_404(Rating, pk=row_id)
    context = 'form': rating
    if request.method == "POST":
        form = RatingForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home.html')
        else :
            return render(request, 'ratings/entry_def.html', 
                          'form': form)
    else:
        return render(
            request,
            'ratings/entry_def.html',
            context
        )

这将导致表单再次显示给用户,如果您对模板进行了正确编码,它将显示哪些字段无效。

【讨论】:

很高兴能帮上忙。由于您是这里的新用户,请允许我指出,如果问题得到解决,习惯上将答案标记为正确。这有助于将来通过 Google 搜索访问此页面的人。 啊哈!我想你是怎么做到的?但我明白了。再次感谢。【参考方案2】:

不管你信不信,我遇到了同样的错误,是 Python 的缩进。

【讨论】:

【参考方案3】:

您对 Python 文件缩进的错误。在遵循教程和/或复制粘贴代码时必须小心。不正确的缩进会浪费大量宝贵的时间。

【讨论】:

【参考方案4】:

你应该返回你正在渲染的文件而不是直接渲染。

def index(request):
    return render(request, 'index.html')

def login(request):
    return render(request,'login.html')

def logout(request): 
    return render(request,'index.html')

【讨论】:

以上是关于View 没有返回 HttpResponse 对象。它返回 None 而不是的主要内容,如果未能解决你的问题,请参考以下文章

“视图没有返回 HttpResponse 对象。而是返回了 None。”

Django基础—— 7.View函数

3 View - Response对象

ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是

django 视图没有返回 HttpResponse 对象。它返回 None 而不是

如何修复 Django:没有返回 HttpResponse 对象。它返回 None 而不是? [复制]