Django站点admin用户个人页404异常问题求助
问题分析与解决方案
核心问题
普通用户个人页(如/account/user01)可正常访问,但超级用户admin的个人页/account/admin/返回404,且无痕模式下访问正常。
可能原因及解决办法
1. 浏览器缓存与会话干扰
普通模式下浏览器缓存了旧的404响应,或登录会话中的数据导致路由匹配异常,而无痕模式无缓存,因此正常。
- 解决操作:
- 清除当前浏览器的缓存和Cookie
- 按
Ctrl+F5强制刷新页面,绕过缓存
2. 路由末尾斜杠不匹配
你的路由规则path('<str:username>', ...)匹配的是不带末尾斜杠的路径(如/account/admin),但实际访问的是带斜杠的/account/admin/。虽然Django默认APPEND_SLASH=True会自动重定向,但登录状态下可能因缓存或会话问题导致重定向失效。
- 修改方案:
调整account/urls.py中的路由,添加末尾斜杠:app_name = 'account' urlpatterns = [ path('login/', auth_views.LoginView.as_view(template_name='account/login.html'), name='login'), path('signup/', views.signup, name='signup'), path('<str:username>/', views.profile, name='profile'), # 新增末尾斜杠 ]
3. 中间件或权限拦截
若项目中存在自定义中间件,可能对登录状态下的admin用户路径做了特殊拦截。
- 排查步骤:
- 检查项目
settings.py中的MIDDLEWARE配置,移除或注释可疑中间件后测试 - 在
profile视图中添加调试打印,确认视图是否被执行:def profile(request, username): print(f"请求的用户名:{username}") try: user = User.objects.get(username=username) print(f"找到用户:{user.username}") except User.DoesNotExist: print(f"用户不存在:{username}") raise Http404("User Does Not Exist!") return render(request, 'account/profile.html', {'user': user})
/account/admin/,查看控制台输出,判断是路由未匹配还是用户查询失败。 - 检查项目
内容的提问来源于stack exchange,提问作者brady
相关产品推荐
相关产品推荐

