【问题标题】:View didn't return an HttpResponse object. It returned None insteadView 没有返回 HttpResponse 对象。它返回 None 而不是
【发布时间】: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?

标签: python django python-2.7 django-views


【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 2019-10-13
        • 2019-06-12
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-28
        • 1970-01-01
        相关资源
        最近更新 更多