视图未返回 HttpResponse 对象。它返回 None 而不是

新手上路,请多包涵

下面的视图是在使用 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.

原文由 user3251349 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

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

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

原文由 e4c5 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Wesley Reis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题