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。”
ValueError - 视图没有返回 HttpResponse 对象。它返回 None 而不是