You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django图书交换系统登录后动态URL重定向路径匹配问题

解决Django登录后重定向到动态用户URL的问题

核心问题梳理

你遇到的路由匹配失败,本质是路由名称不匹配、动态URL配置错误、视图return语句遗漏这几个问题叠加导致的,下面是针对性修复步骤:


1. 修正路由名称不匹配

在exchange/urls.py中,用户详情路由的name是userview,但你在login_request视图里用了redirect('user_view', id=user.id),名称不一致导致反向解析失败。

修改exchange/views.py的login_request视图:

# 把原代码中的这一行
return redirect('user_view', id=user.id)
# 改成
return redirect('userview', id=user.id)

2. 修复LOGIN_REDIRECT_URL无效配置

LOGIN_REDIRECT_URL = '/accounts/int:id/'是错误写法,Django无法识别这种动态参数格式。推荐通过自定义视图实现动态重定向:

  • 在exchange/views.py中添加:
    def login_redirect(request):
        # 自动跳转到当前登录用户的详情页
        return redirect('userview', id=request.user.id)
    
  • 在exchange/urls.py中添加对应路由:
    path('login-redirect/', views.login_redirect, name='login_redirect'),
    
  • 修改settings.py:
    LOGIN_REDIRECT_URL = 'login_redirect'
    

3. 调整路由路径(可选,按你的URL设计需求)

当前用户详情路由挂在/exchange/下,实际访问路径是/exchange/accounts/<id>/。如果期望路径是/accounts/<id>/,需要把路由移到项目根urls.py:

# 项目根urls.py
from exchange.views import user_view

urlpatterns = [
    path('exchange/',include('exchange.urls')),
    path('accounts/', include('django.contrib.auth.urls')),
    path('accounts/<int:id>/', user_view, name='userview'),  # 添加这一行
    path('admin/', admin.site.urls),
]

同时删除exchange/urls.py中对应的path('accounts/<int:id>/', views.user_view, name='userview'),。


4. 补全视图中遗漏的return语句

register_request和login_request的else分支里,你调用了render但没有返回,会导致视图返回None引发服务器错误:

# 修改exchange/views.py中的register_request分支
else:
    messages.error(request, 'Invalid form')
    return render(request, 'exchange/register.html',{'form':form})  # 补加return

# 修改login_request中的两个else分支
else:
    messages.error(request, 'Invalid username or password')
    return render(request, 'exchange/login.html',{'form':form})  # 补加return
else:
    messages.error(request, 'Invalid form')
    return render(request, 'exchange/login.html',{'form':form})  # 补加return

5. 完善内置LoginView配置(若使用官方登录视图)

如果你注释了自定义login_request,改用auth_views.LoginView,需要指定正确的跳转目标:

# exchange/urls.py
from django.urls import reverse_lazy

path('login/', auth_views.LoginView.as_view(
    template_name='exchange/login.html',
    success_url=reverse_lazy('login_redirect')  # 指向自定义的重定向视图
), name='login'),

验证修复

完成以上修改后,重启Django服务器,登录用户即可自动跳转到对应个人信息页面,路由匹配错误提示会消失。

内容的提问来源于stack exchange,提问作者Ackeem Mclennon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:15:43