Django普通用户注册提交时出现404路径错误求助
Django注册提交后404错误修复
问题根源
提交表单后出现http://127.0.0.1:8000/register/register的404错误,核心原因是HTML表单的action属性使用了相对路径"register"。当前页面路径为/register/,浏览器会自动将相对路径拼接到当前路径后,形成不存在的/register/register路径,而你的URLconf中仅配置了register/规则,导致路径匹配失败。
解决方案
1. 修正表单的action属性
推荐使用Django的url标签反向解析URL,这种方式不受后续URL规则修改的影响,更可靠:
<form action="{% url 'register' %}" method="post"> {% csrf_token %} <input type="text" name="first_name" placeholder="First name"><br> <input type="text" name="last_name" placeholder="Last name"><br> <input type="text" name="username" placeholder="Username"><br> <!-- 原代码type="username"不符合HTML标准,改为text --> <input type="email" name="email" placeholder="Email"><br> <input type="password" name="password" placeholder="password"><br> <input type="password" name="confirm_password" placeholder="confirm_password"><br> <input type="submit" name="submit" value="Register"> </form>
也可以直接将action设为空字符串,让表单提交到当前页面的URL:
<form action="" method="post">
2. 优化视图重定向与校验逻辑
视图中return redirect(home)如果home是视图函数,需确保URLconf中给首页视图设置了name='home',否则建议改为更通用的写法:
return redirect('home') # 对应urls里的name='home' # 或直接使用绝对路径 return redirect('/')
同时建议恢复注释掉的密码校验、用户存在性检查逻辑,避免无效用户创建:
def register(request): if request.method=="POST": first_name=request.POST.get('first_name') last_name=request.POST['last_name'] username=request.POST['username'] email=request.POST['email'] password=request.POST['password'] confirm_password=request.POST['confirm_password'] if password != confirm_password: print("Password and Confirm Password Does Not Match") return render(request, "register.html", {'error': '密码与确认密码不匹配'}) if User.objects.filter(username=username).exists(): print("Username Already Taken") return render(request, "register.html", {'error': '用户名已存在'}) if User.objects.filter(email=email).exists(): print("Email Already Taken") return render(request, "register.html", {'error': '邮箱已被使用'}) user=User.objects.create_user(username=username,password=password,email=email,first_name=first_name,last_name=last_name) user.save() print("User Created") return redirect('home') else: return render(request,"register.html")
验证修改
完成上述调整后,提交表单时会正确POST到/register/路径,视图处理完成后将重定向到首页,404问题即可解决。
内容的提问来源于stack exchange,提问作者Debasish Kundu
相关产品推荐
相关产品推荐

