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

Django DeleteView删除功能URL反向解析pk参数赋值错误求助

问题根因

你模板上下文的话题对象是嵌套在content字段下的,没有独立的topic变量,所以直接传入pk=topic.id时Django无法找到对应变量,触发反向解析报错。

修复步骤
  1. 首先修改模板的url参数,替换为content.topic.id:
<a class="btn btn-danger" href="{% url 'delete_topic' pk=content.topic.id %}">Delete</a>
  1. 建议补全urls.py路径末尾的斜杠,匹配Django默认的APPEND_SLASH配置,避免额外的路径跳转问题:
path('topic/<int:pk>/delete/', DeleteTopic.as_view(), name='delete_topic'),
额外注意事项
  • DeleteView默认需要确认删除页面的模板,模板命名规则为[你的应用名]/topic_confirm_delete.html,没有创建对应模板的话跳转后会报模板不存在错误,模板示例代码如下:
<form method="post">
    {% csrf_token %}
    <p>确认删除话题「{{ object.name }}」吗?</p>
    <button type="submit" class="btn btn-danger">确认删除</button>
    <a href="{% url 'index' %}" class="btn btn-secondary">取消</a>
</form>
  • 现有逻辑没有权限校验,任意登录用户都可以删除其他人的话题,建议在视图中增加权限判断:
from django.http import HttpResponseForbidden

class DeleteTopic(DeleteView):
    model = Topic
    success_url = reverse_lazy('index')

    def dispatch(self, request, *args, **kwargs):
        topic = self.get_object()
        if topic.user != request.user:
            return HttpResponseForbidden("你没有权限删除该话题")
        return super().dispatch(request, *args, **kwargs)

内容的提问来源于stack exchange,提问作者DDT19F1127 MUHAMMAD DHAIFULLAH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:06:00