URL会自动添加- Django



我有一个问题,而重定向到编辑表单。所以我所做的是,每当用户点击编辑按钮,它重定向到"editadmin/{{admin.id}}"使用form action = "editadmin/{{admin.id}}"在HTML。

URL路径

path("editadmin/<int:id>", views.editadmin, name="editadmin")
path("update/<int:id>", views.updateadmin, name="updateadmin")

Views.py

@csrf_exempt
def editadmin(request, id):
admin = Admin.objects.get(id=id)
return render(request, "editadmin.html", {"admin": admin})
@csrf_exempt
def updateadmin(request, id):
if request.method == "POST":
admin_id = request.POST["admin_id"]
admin_id = str(admin_id).strip().upper()
name = request.POST["name"]
name = str(name).strip()

if db_name equals to name:
messages.error(request, "Admin name already exists")
return redirect("editadmin/" + str(id))

editadmin.html


<form method="post" class="post-form" action="/update/{{admin.id}}">
<input type="hidden" name="id" id="id" required maxlength="20" value="{{ admin.id }}"/>
{% csrf_token %}
<div class="form-group row">
<label class="col-sm-3 col-form-label"><h4 style="margin-left:40px">Admin ID : </h4></label>
<div class="col-sm-4">
<input type="text" name="admin_id" required style="margin-left:20px; height:38px; width:300px;
border-radius: 5px" id="admin_id" value="{{ admin.admin_id }}"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label"><h4 style="margin-left:40px">Name : </h4></label>
<div class="col-sm-4">
<input type="text" name="name" style="margin-left:20px; height:38px;
border-radius: 5px; width:300px" required id="name" value="{{ admin.name }}"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-1 col-form-label"></label>
<div class="col-sm-4">
<button type="submit" class="btn btn-success" style="margin-left:210px">Submit</button>
</div>
</div>

所以我想要的是,每当用户在editadmin.html (URL -editadmin/1)中提交无效名称时,它应该重定向到相同的URLeditadmin/1,但它所做的是附加update/,重定向到update/editadmin/1如何解决这个问题?我不希望update/在重定向到相同的形式后被追加。

update/正在追加,因为您提到了表单操作到此URL。所以你可以这样做,而不是在表单中提到动作。

@csrf_exempt
def updateadmin(request, id):
if request.method == "POST":
admin_id = request.POST["admin_id"]
admin_id = str(admin_id).strip().upper()
name = request.POST["name"]
name = str(name).strip()
# asuming you are checking if admin with this name already exists in database
if db_name equals to name: 
messages.error(request, "Admin name already exists")
return redirect("editadmin/" + str(id))
# It mean user enter a unique name
else:
# your logic to save the incoming user here.
message.success(request, "Your success message")
return redirect(f'/update/{admin_id}')

,确保更新你的表单从这个:

<form method="post" class="post-form" action="/update/{{admin.id}}">

:

<form method="post" class="post-form" action="">

最新更新