
Django 注册表单提交时出现 URL 路径重复(如 /users/register/users/register/),根本原因是表单 action 属性使用了相对路径,导致浏览器在当前路径基础上二次拼接。修复方法是将 action 改为绝对路径或更优地——使用 Django 的 {% url %} 模板标签动态生成 URL。
django 注册表单提交时出现 url 路径重复(如 `/users/register/users/register/`),根本原因是表单 `action` 属性使用了相对路径,导致浏览器在当前路径基础上二次拼接。修复方法是将 `action` 改为绝对路径或更优地——使用 django 的 `{% url %}` 模板标签动态生成 url。
这个问题的本质在于 URL 解析机制:当用户已位于 http://localhost:8000/users/register/ 页面,而表单的 action="users/register/" 是一个相对路径,浏览器会将其解析为「相对于当前路径」——即 users/register/ + users/register/ → /users/register/users/register/,从而触发 404 错误。
✅ 正确做法是避免硬编码路径,改用 Django 内置的 URL 反向解析机制:
✅ 推荐方案:使用 {% url %} 模板标签(最安全、可维护)
修改 users/register.html 中的表单部分如下:
确保 users/urls.py 中的命名 URL 模式已正确定义(你已做到):
# users/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register_view, name="register"), # ✅ name 关键!
]
? 优势:
- 路径变更时无需修改模板;
- 自动适配
APPEND_SLASH=True等设置;- 避免硬编码错误和环境差异(如部署子路径时仍可靠)。
⚠️ 替代方案(不推荐):绝对路径前加 /
若暂不使用 {% url %},可改为:











