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

Django使用DeleteView类视图执行删除操作无法跳转确认页面求助

问题原因
  • 核心原因是URL匹配顺序错误,Django的URL路由会从上到下按顺序匹配,你现在的badge/<int:pk>/delete/路径写在了badge/<int:pk>/<slug:slug>/路径后面,当你访问删除地址时,Django会把路径里的delete识别为slug参数,优先匹配到详情页路由,直接跳转至详情页,根本不会走到删除路由。
  • 次要问题:你的Badge模型没有定义slug字段,但详情页路由设置了slug参数,会导致详情页本身的查询逻辑存在隐患。
解决步骤
  1. 调整urls.py中的路由顺序,把更具体的路由放在前面,模糊的路由放在后面,修改后的urlpatterns如下:
urlpatterns = [
    path('badge/', article_views.BadgeListView.as_view(), name='badge_list'),
    path('badge/add/', article_views.BadgeCreateView.as_view(), name='badge_create'),
    # 把更新、删除路由放在详情页路由前面
    path('badge/<int:pk>/', article_views.BadgeUpdateView.as_view(), name='badge_update'),
    path('badge/<int:pk>/delete/',
         article_views.BadgeDeleteView.as_view(
             template_name='ArticlesApp/badge_confirm_delete.html'),
         name='badge_confirm_delete'),
    # 带slug的详情页路由放在最后
    path('badge/<int:pk>/<slug:slug>/', article_views.BadgeReadView.as_view(), name='badge_read'),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. 处理slug字段问题,二选一即可:
    • 如果你确实需要用slug做路由参数,给Badge模型添加slug = models.SlugField(max_length=100, unique=True)字段,执行迁移后,在保存Badge实例时自动生成slug值。
    • 如果你不需要slug参数,直接把详情页路由里的<slug:slug>/删除,修改为path('badge/<int:pk>/read/', article_views.BadgeReadView.as_view(), name='badge_read')即可,同时对应调整页面里的详情页跳转链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:27:03