Django登录重定向异常:无法跳转至自定义页面
解决Django登录后跳转到默认accounts/profile的问题
你的问题核心是登录请求实际走了Django内置的LoginView,而非你自定义的login_view,导致重定向逻辑不符合预期,另外视图里修改全局配置的操作完全无效。以下是具体修复方案:
方案一:使用自定义的login_view(推荐)
你已经写了带错误提示的自定义登录逻辑,只需要让表单提交到这个视图即可:
- 修改
urls.py,将login/路径绑定到自己的视图:
from django.urls import path from django.contrib.auth import views as auth_views from . import views urlpatterns = [ path('login/', views.login_view, name='login'), # 替换内置LoginView为自定义视图 path('logout/', auth_views.LogoutView.as_view(), name='logout'), path('phase1/', views.phase1_view, name='phase1'), ]
- 删除
phase1_view中无效的配置代码:
# 删掉这行,完全没用 # settings.LOGIN_REDIRECT_URL = '/myapp/phase1/'
你的自定义login_view里已经在验证成功后执行return redirect('phase1'),这样登录后就会直接跳转到phase1页面。
方案二:继续使用Django内置LoginView
如果想保留内置视图,需要正确配置重定向目标:
- 在
settings.py中添加正确的重定向配置:
LOGIN_URL = 'login' LOGIN_REDIRECT_URL = 'phase1' # 使用URL名称比硬编码路径更可靠,也可以写'/myapp/phase1/'
- 或者直接给内置LoginView指定成功跳转地址:
path('login/', auth_views.LoginView.as_view( template_name='myapp/login.html', success_url='/myapp/phase1/' # 或者用reverse_lazy('phase1')避免加载顺序问题 ), name='login'),
关键错误说明
- 你在
phase1_view中修改settings.LOGIN_REDIRECT_URL是无效的:全局配置应该在settings.py中设置,且登录重定向的逻辑在登录完成前就已经执行,视图里修改根本赶不上时机。 - 表单的
action指向{% url 'login' %},但原来的urls里这个名称绑定的是内置LoginView,导致你的自定义login_view根本没被调用,所以你写的redirect('phase1')从来没执行过。
内容的提问来源于stack exchange,提问作者Trives Dixit
相关产品推荐
相关产品推荐

