You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Python+Django+Bootstrap环境下的删除按钮功能?

嘿,别担心!作为新手刚接触Django的时候,这种CRUD操作确实容易懵,我来一步步带你实现删除任务的功能,咱们从基础的部分开始:

第一步:确认你的Todo模型配置正确

首先确保你已经在models.py里定义了Todo模型,比如这样:

# todo/models.py
from django.db import models

class Todo(models.Model):
    title = models.CharField(max_length=200)
    completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

如果还没迁移模型,记得跑这两个命令:

python manage.py makemigrations
python manage.py migrate
第二步:编写删除任务的视图(用Django自带的类视图,新手友好)

Django提供了现成的DeleteView类视图,不用自己写复杂的删除逻辑,直接用就行。在views.py里添加:

# todo/views.py
from django.views.generic.edit import DeleteView
from django.urls import reverse_lazy
from .models import Todo

class TodoDeleteView(DeleteView):
    model = Todo
    # 删除成功后跳回任务列表页,这里的'todo_list'是你列表视图的URL名称
    success_url = reverse_lazy('todo_list')

小提示:用reverse_lazy而不是reverse,因为类视图加载的时候URL配置还没完全初始化,reverse_lazy会延迟解析

第三步:配置URL路由

在你的app的urls.py里添加删除任务的路由:

# todo/urls.py
from django.urls import path
from .views import TodoListView, TodoDeleteView  # 假设你已经有了列表视图TodoListView

urlpatterns = [
    path('', TodoListView.as_view(), name='todo_list'),
    # 这里的<int:pk>是任务的主键,Django会自动匹配对应的Todo对象
    path('<int:pk>/delete/', TodoDeleteView.as_view(), name='todo_delete'),
]
第四步:在模板里添加Bootstrap风格的删除按钮

现在去你的任务列表模板(比如todo/todo_list.html),给每个任务项加上删除按钮。因为删除需要POST请求,所以要用表单包裹按钮,还要加上Django的{% csrf_token %}来防止跨站请求伪造:

<!-- todo/todo_list.html -->
{% for todo in object_list %}
<div class="card mb-2">
  <div class="card-body d-flex justify-content-between align-items-center">
    <h5 class="card-title">{{ todo.title }}</h5>
    <!-- Bootstrap 删除按钮表单 -->
    <form action="{% url 'todo_delete' todo.pk %}" method="POST" class="d-inline">
      {% csrf_token %}
      <button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确定要删除这个任务吗?')">
        删除
      </button>
    </form>
  </div>
</div>
{% endfor %}

简单解释下细节:

  • d-inline让表单和按钮保持行内显示,不会占整行
  • btn btn-danger btn-sm是Bootstrap的红色小按钮样式
  • onclick的确认弹窗可以防止误删,很实用
可选:如果想自己写函数视图(理解底层逻辑)

如果你想搞清楚删除的底层逻辑,也可以用函数视图实现:

# todo/views.py
from django.shortcuts import get_object_or_404, redirect
from .models import Todo

def todo_delete(request, pk):
    todo = get_object_or_404(Todo, pk=pk)
    if request.method == 'POST':
        todo.delete()
        return redirect('todo_list')
    # 如果是GET请求,直接跳回列表页(避免误删)
    return redirect('todo_list')

对应的URL要改成:

path('<int:pk>/delete/', views.todo_delete, name='todo_delete'),

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:14