Skip to main content
 首页 » 编程设计

python之如何解决 django 的 did not return httpresponse 错误

2024年08月16日38落叶

我在注册 django 时遇到问题,这是我的 View 代码:

def register(request): 
    if request.method == 'POST': 
        form = RegistrationForm(request.POST) 
        if form.is_valid(): 
            form.save() 
            return redirect('/') 
    else: 
        form = RegistrationForm() 
 
        args = {'form': form} 
        return render(request, 'users/reg_form.html', args) 

,但我总是得到:

ValueError at /user/register/ The view Users.views.register didn't return an HttpResponse object. It returned None instead. Request Method: POST Request URL: http://127.0.0.1:3001/user/register/ Django Version: 2.0.2 Exception Type: ValueError Exception Value: The view Users.views.register didn't return an HttpResponse object. It returned None instead. Exception Location: /home/iah/.local/lib/python3.5/site-packages/django/core/handlers/base.py in _get_response, line 139

请您参考如下方法:

检查你的代码并问问自己如果你有一个 POST 请求并且表单没有验证会发生什么 - 你会发现在这种情况下你没有明确的返回路径,所以函数隐式返回 None 。

修复非常简单:取消缩进函数的最后两行,这样当表单未验证时您也返回呈现的模板:

def register(request): 
    if request.method == 'POST': 
        form = RegistrationForm(request.POST) 
        if form.is_valid(): 
            form.save() 
            return redirect('/') 
 
    else: 
        form = RegistrationForm() 
 
    # MAKE SURE WE ALWAYS RETURN A RESPONSE: 
    # we end up here when it's a GET request  
    # AND when it's a POST request and the form 
    # did not validate    
    args = {'form': form} 
    return render(request, 'users/reg_form.html', args)