【问题标题】:didn't return an HttpResponse object. It returned None instead没有返回 HttpResponse 对象。它返回 None 而不是
【发布时间】:2019-10-13 05:43:44
【问题描述】:

当错误地将用户注册到我的网站时,我收到以下错误:

ValueError at /accounts/register/ 查看accounts.views.register 没有返回 HttpResponse 对象。它返回 None 。

views.py:

def register(request):
   if request.method == 'POST':
      form = RegistrationForm(request.POST)
      if form.is_valid():
          form.save()
          return redirect('/accounts')

   else:
      form = RegistrationForm()

      args = {'form': form}
      return render(request, 'accounts/reg_form.html', args)

urls.py:

urlpatterns = [
  path('', views.home, name="home"),
  path('explore/', views.explore, name='explore'),
  path('login/', LoginView.as_view(template_name='accounts/login.html'), name='login'),
  path('logout/', LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
  path('register/', views.register, name='register'),
  path('profile/', views.view_profile, name='profile'),
  path('profile/edit/', views.edit_profile, name='profile-edit'),
  path('change-password/', views.change_password, name='change_password'),
  path('reset-password/', PasswordResetView.as_view(template_name='accounts/reset_password.html'),
     name='reset-password'),
  path('reset-password/done/', PasswordResetDoneView.as_view(), name='password_reset_done'),
  path('reset-password/confirm/<uidb64>/<token>/',
     PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
  path('reset-password/complete/', PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

main/urls.py:

urlpatterns = [
   path('', views.login_redirect, name='login_redirect'),
   path('admin/', admin.site.urls),
   path('accounts/', include('accounts.urls')),

  ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

  • 尝试导入from django.http import HttpResponse并返回HttpResponse
  • if form.is_valid(): return redirect(...) else?

标签: python django


【解决方案1】:

您没有返回任何内容,因为案例表单无效..

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

   else:
      form = RegistrationForm()

      args = {'form': form}
      return render(request, 'accounts/reg_form.html', args)

它将重定向到 account/reg_form.html 并通过表单生成错误

【讨论】:

    【解决方案2】:

    您应该将最后两行移回一级。

    else:
      form = RegistrationForm()
    
    args = {'form': form}
    return render(request, 'accounts/reg_form.html', args)
    

    【讨论】:

      【解决方案3】:

      你的 return 应该是四个空格,也就是说 return 不应该是 else 条件。

      从这里更改views.py:

      else:
        form = RegistrationForm()
      
        args = {'form': form}
        return render(request, 'accounts/reg_form.html', args)
      

      到这里:

      else:
        form = RegistrationForm()
      
        args = {'form': form}
      return render(request, 'accounts/reg_form.html', args)
      

      【讨论】:

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