
Django 注册表单提交时出现路径叠加(如 /users/register/users/register/)是因表单 action 使用了相对路径,导致浏览器在当前 URL 基础上拼接。正确做法是使用绝对路径(以 / 开头)或 Django 的 {% url %} 模板标签生成规范 URL。
django 注册表单提交时出现路径叠加(如 `/users/register/users/register/`)是因表单 `action` 使用了相对路径,导致浏览器在当前 url 基础上拼接。正确做法是使用绝对路径(以 `/` 开头)或 django 的 `{% url %}` 模板标签生成规范 url。
造成该问题的根本原因在于 HTML 表单中的 action="users/register/" 是相对路径。当用户已位于 http://localhost:8000/users/register/ 页面时,浏览器会将 action 的值相对于当前路径解析,结果变成 http://localhost:8000/users/register/users/register/ —— 这正是错误截图中显示的双重路径。
✅ 推荐解决方案:使用 Django 的 {% url %} 模板标签(最安全、可维护性最强)
首先确保你的 users/urls.py 中的命名 URL 正确注册:
# users/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register_view, name='register'), # ✅ name 已存在,无需修改
]
然后更新注册模板,用 {% url 'register' %} 替代硬编码路径:
<!-- users/templates/users/register.html -->
<meta charset="UTF-8"><title>Registration</title><h1>REGISTER A NEW USER</h1>
<!-- ✅ 使用 {% url %} 标签生成绝对路径 -->
? 为什么这样更优?
- 自动适配项目根路径(如部署在子路径
/myapp/下仍能正确解析); - URL 配置变更时,模板无需修改(解耦);
- 支持 IDE 跳转和静态检查,减少拼写错误。
⚠️ 备选方案(不推荐长期使用):手动加前导斜杠
若暂不引入模板标签,可改为绝对路径:











