Django注册页面重定向失效:路径重复问题排查求助
Django注册表单提交路径重复问题修复
问题描述
开发Django注册页面时,提交表单后系统尝试访问重复路径localhost/users/register/users/register/,导致错误。
相关代码
users/views.py
def register_view(request): if request.method == "POST": form = UserCreationForm(request.POST) if form.is_valid(): form.save() return redirect('homepage') else: form = UserCreationForm() return render(request, "users/register.html", {"form": form})
users/urls.py
urlpatterns = [ path('register/', views.register_view, name="register"), ]
main/views.py
def homepage(request): return render(request, 'homepage.html')
main/urls.py
urlpatterns = [ path('admin/', admin.site.urls), path('', views.homepage, name="homepage"), path('music/', include('music.urls')), path('users/', include('users.urls')), ]
注册页面模板(users/register.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Registration</title> </head> <body> <h1>REGISTER A NEW USER</h1> <form class="form-with-validation" action="users/register/" method="post"> {% csrf_token %} {{ form }} <button class="form-submit">Submit</button> </form> </body> </html>
问题原因
当前页面的URL是localhost/users/register/,表单的action属性使用了相对路径users/register/,浏览器会自动将该相对路径追加到当前页面路径之后,最终形成重复的localhost/users/register/users/register/路径。
修复方案
以下三种方法任选其一即可:
方法1:将action设为空字符串
让表单提交到当前页面的URL,无需额外路径拼接:<form class="form-with-validation" action="" method="post">方法2:使用Django模板标签生成正确URL
利用urls配置中定义的name="register",通过{% url %}标签自动生成正确路径,这是Django推荐的做法:<form class="form-with-validation" action="{% url 'register' %}" method="post">方法3:使用根目录开头的绝对路径
直接指定从域名根目录开始的完整路径,注意开头的斜杠/:<form class="form-with-validation" action="/users/register/" method="post">
内容的提问来源于stack exchange,提问作者Federico Monetti
相关产品推荐
相关产品推荐

