【问题标题】:URL is adding automatically - DjangoURL 自动添加 - Django
【发布时间】: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 非常感谢你。它现在正在工作

标签: python django rest url


【解决方案1】:

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="">

【讨论】:

  • 一个问题,如果"/update/{{admin.id}}"没有付诸行动,那么它将如何调用URL路径path("update/&lt;int:id&gt;", views.updateadmin, name="updateadmin")
  • 顺便说一句,我找到了我的解决方案。但是感谢您在这个问题上付出的努力
猜你喜欢
  • 2011-05-25
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
相关资源
最近更新 更多