Django DeleteView删除功能URL反向解析pk参数赋值错误求助
问题根因
你模板上下文的话题对象是嵌套在content字段下的,没有独立的topic变量,所以直接传入pk=topic.id时Django无法找到对应变量,触发反向解析报错。
修复步骤
- 首先修改模板的url参数,替换为
content.topic.id:
<a class="btn btn-danger" href="{% url 'delete_topic' pk=content.topic.id %}">Delete</a>
- 建议补全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
相关产品推荐
相关产品推荐

