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

Django路径问题:点击登录跳转至/login/login/而非根路径如何解决

问题根因

你遇到的路径拼接错误是因为表单使用了无开头斜杠的相对路径,浏览器会将该路径和当前页面路径拼接后发起请求,所以在/login/页面提交表单时就会请求/login/login/。

具体修改方案

1. 修正模板表单的action属性

login.html修改:

将原来的表单标签

<form action="login/" method="post">

改为使用站点绝对路径,或者更推荐的Django路由名称反查方式:

<!-- 方式1:绝对路径 -->
<form action="/login/" method="post">
<!-- 方式2:路由反查(更易维护,后续改路由地址不用动模板) -->
<form action="{% url 'login' %}" method="post">

signup.html同步修改:

同理,signup.html的表单也存在同样的相对路径问题,将

<form action="signup/" method="post">

改为:

<!-- 方式1:绝对路径 -->
<form action="/signup/" method="post">
<!-- 方式2:路由反查 -->
<form action="{% url 'signup' %}" method="post">

2. 修正urls.py重复命名问题

当前urls.py中根路径和/signup/路径都用了name='signup',属于不规范的重复命名,会导致路由匹配异常,修改为:

urlpatterns = [
    path('',views.signup, name='home'), # 根路径改名为home
    path('signup/',views.signup,name='signup'),
    path('login/',views.login,name='login'),
]

3. 优化登录成功跳转逻辑

登录成功后要跳转根路径,views.py的login函数中修改redirect参数,避免空字符串的歧义:

if user is not None:
    auth.login(request,user)
    # 两种方式二选一
    return redirect('/') # 直接跳根路径
    # 或者用上面改的路由名 return redirect('home')

内容的提问来源于stack exchange,提问作者Saptarshee Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:36:05