Django登录跳转异常:登录后始终返回登录页求助
解决Django登录后循环跳转回登录页的问题
看起来你遇到了典型的URL配置冲突导致的循环跳转问题,我来帮你一步步梳理和解决:
问题根源分析
你的配置里有两个关键问题导致了无限循环:
- URL路径重叠:项目
Inventory/urls.py中url(r'^home/', include('myapp.urls'))会把所有/home/开头的请求转发给myapp的urls。而myapp的urls里url(r'^$', login, ...)会匹配/home/这个路径(因为include后,myapp处理的是home/之后的空字符串),所以访问/home/直接进入登录页。 - 重定向路径错误:
LOGIN_REDIRECT_URL = 'home/'让登录成功后跳转到/home/,而这个路径又指向登录视图,形成闭环循环。
解决方案步骤
1. 调整URL配置,避免路径冲突
修改项目Inventory/urls.py,把home路径直接映射到视图,而非通过include转发:
from django.conf.urls import url, include from django.contrib import admin from myapp import views # 导入myapp的视图 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^myapp/', include('myapp.urls')), url(r'^home/$', views.home, name='home'), # 直接绑定home路径到视图 ]
然后修改myapp/urls.py,给登录视图单独设置路径并命名:
from django.conf.urls import url from . import views from django.contrib.auth.views import login urlpatterns = [ # 给登录视图设置独立路径并命名 url(r'^login/$', login, {'template_name': 'myapp/login.html'}, name='login'), ]
2. 修正登录重定向配置
在项目settings.py中,把LOGIN_REDIRECT_URL改为URL的命名(推荐用命名URL而非硬编码路径,更稳定):
LOGIN_REDIRECT_URL = 'home'
3. 确保home视图需要登录访问
在myapp/views.py中给home视图添加@login_required装饰器,这样未登录用户访问home会自动跳转到登录页,登录后正确进入home:
from django.shortcuts import render from django.contrib.auth.decorators import login_required @login_required def home(request): # 在这里获取你通过admin创建的Model数据,比如: # from .models import YourInventoryModel # inventory_items = YourInventoryModel.objects.all() # return render(request, 'myapp/home.html', {'items': inventory_items}) return render(request, 'myapp/home.html')
可选:用Django 2.0+的path语法(如果你的版本支持)
如果你的Django版本是2.0或以上,建议使用更简洁的path替代url:
项目urls.py:
from django.urls import path, include from django.contrib import admin from myapp import views urlpatterns = [ path('admin/', admin.site.urls), path('myapp/', include('myapp.urls')), path('home/', views.home, name='home'), ]
myapp/urls.py:
from django.urls import path from . import views from django.contrib.auth.views import LoginView urlpatterns = [ path('login/', LoginView.as_view(template_name='myapp/login.html'), name='login'), ]
这样调整后,登录成功后就会正确跳转到home页面,不会再循环回到登录页了。
内容的提问来源于stack exchange,提问作者gautam2122
相关产品推荐
相关产品推荐

