我如何使用 Bootstrap4 模态在 Django 中制作功能正常的删除确认弹出窗口

Posted

技术标签:

【中文标题】我如何使用 Bootstrap4 模态在 Django 中制作功能正常的删除确认弹出窗口【英文标题】:How do i make a functioning Delete confirmation popup in Django using Bootstrap4 Modal 【发布时间】:2020-08-19 02:14:28 【问题描述】:

我的views.py 文件如下所示。

def deleteOrder(request, pk):
    order = Order.objects.get(id=pk)

    if request.method=="POST":
        order.delete()
        return redirect('/')
    context = "item":order

    return render(request, 'accounts/delete.html', context)

我的delete.html 文件是这个。如果有办法摆脱它或在删除弹出窗口中使用它的部分代码,请提供帮助。


% block content %

<br>
<div class="row">
    <div class="col-md-6">
        <div class="card card-body">
            <p>Are you sure you want to delete "item"?</p>

            <form action="% url 'delete_order' item.id %" method="POST">

                % csrf_token %
                <a class="btn btn-warning" href="% url 'home' %">Cancel</a>
                <button type="submit" class="btn btn-danger">Delete</button>
            </form>

        </div>
    </div>
</div>

% endblock %

我的urls.py 文件如下所示。

urlpatterns = [
    path('delete_order/<str:pk>', views.deleteOrder, name="delete_order"),
]

Bootstrap Delete Popup 我需要帮助申请。

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

我的Home page 由一个表组成,其中包含一个用于删除每一行的Delete 列。

<table class="table table-sm">
                <tr>
                    <th>Product</th>
                    <th>Date Ordered</th>
                    <th>Status</th>
                    <th>Update</th>
                    <th>Delete</th>
                </tr>

                % for order in orders %
                <tr>
                    <td> order.product </td>
                    <td> order.date_created </td>
                    <td> order.status </td>
                    <td><a class="btn btn-sm btn-info" href="% url 'update_order' order.id %">Update</a></td>
                    **<td><a class="btn btn-sm btn-danger" href="% url 'delete_order' order.id %">Delete</a></td>**
                </tr>
                % endfor %

            </table>

我添加的行 ** 星号(故意)是我要修改的行,以便当我单击 删除 按钮时,会触发 Bootstrap 删除弹出模式。

【问题讨论】:

【参考方案1】:

试试这个。

<!-- Modal -->
    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <div class="modal-body">
            ...
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            <a class="btn btn-sm btn-danger" href="% url 'delete_order' order.id %">Delete</a>
          </div>
        </div>
      </div>
    </div>
<table class="table table-sm">
    <tr>
        <th>Product</th>
        <th>Date Ordered</th>
        <th>Status</th>
        <th>Update</th>
        <th>Delete</th>
    </tr>

    % for order in orders %
    <tr>
        <td> order.product </td>
        <td> order.date_created </td>
        <td> order.status </td>
        <td><a class="btn btn-sm btn-info" href="% url 'update_order' order.id %">Update</a></td>
        <td><a class="btn btn-sm btn-danger" href="#" data-toggle="modal" data-target="#exampleModal">Delete</a></td>
    </tr>
    % endfor %

</table>

--- 更新 --- url.py,最常用的是urls.py 你的pk应该是int而不是str

urlpatterns = [
    path('delete_order/<int:pk>', views.deleteOrder, name="delete_order"),
]

【讨论】:

如何处理url.pydelete.html 文件?因为我的路径存在一些我似乎无法修复的问题。 那么第二个问题在这里return render(request, 'accounts/delete.html', context),这呈现了我试图避免的delete.html。我希望它转为使用 Popup 而不是创建 delete.html 文件。 但是没有显示模态并且yes按钮删除de对象吗?要摆脱模板,您可能需要实现 AJAX 请求。

以上是关于我如何使用 Bootstrap4 模态在 Django 中制作功能正常的删除确认弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4的模态和滚动模态有啥区别?

模态关闭后,Bootstrap 4 模态背景仍然存在

带有远程模态的引导程序 4

Bootstrap4 模态框(完结)

Bootstrap 4 模态不透明度

如何让 React.js 和 Bootstrap 4 模态轮播始终在打开时显示第一张图像