【发布时间】:2021-01-22 14:56:12
【问题描述】:
我在重定向到编辑表单时遇到了问题。
所以我正在做的是,每当用户点击编辑按钮时,它都会使用 HTML 中的form action = "editadmin/{{admin.id}}" 重定向到"editadmin/{{admin.id}}"。
网址路径是
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 ) 中提交无效名称时,它应该重定向到相同的 URL editadmin/1 但它的作用是附加 update/ 重定向到 @ 987654329@
如何解决这个问题?我不希望 update/ 在重定向到相同的表单后被附加。
【问题讨论】:
-
我的建议是你应该使用 url 命名空间,而 url 重定向
return redirect('editadmin', id=id)。否则,您可以在实际重定向网址之前附加一个斜杠/,例如return redirect(f'/editadmin/{id}')。 -
@Jeet 非常感谢你。它现在正在工作