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

Django使用{% url %}标签时报Reverse for 'build-log-delete'无参数匹配错误

问题根因

你在urls.py中定义的build-log-delete路由规则包含2个必填路径参数<int:pk>(对应关联的post id)和<int:pkz>(对应要删除的build log id),使用Django模板的{% url %}标签反向生成路由时,必须传入这两个参数才能拼接出合法的URL,你当前没有传参,所以触发了反向解析失败的报错。

修复步骤

1. 修改模板中的删除按钮链接

你当前页面的上下文已经传入了log对象,从中可以获取到两个参数的对应值,把删除按钮的href修改为:

<a class="delete-btn" href="{% url 'build-log-delete' pk=log.post_id pkz=log.pk %}">Delete</a>

如果要更严谨,也可以在BuildLogDisplay视图的context中加入路径参数pk,直接传参即可:

context = {
    'post':post, 'log':log, 'pk':pk
}

对应模板写法可以改成:

<a class="delete-btn" href="{% url 'build-log-delete' pk=pk pkz=log.pk %}">Delete</a>

2. 修正Delete视图的参数接收

你当前的BuildLogDelete视图没有对应接收路由传递的两个路径参数,需要修改视图定义:

def BuildLogDelete(request, pk, pkz):             
    # 后续可以用pkz查询要删除的BuildLog对象,完成权限校验、删除逻辑
    log = BuildLog.objects.get(pk=pkz)
    # 这里可以加作者校验,防止越权删除
    if log.author != request.user:
        # 可自行补充无权限处理逻辑
        pass
    context = { }
    return render(request, 'blog/BuildLogDelete.html', context)

补充说明

为什么必须传这两个参数?因为你的路由规则就是按「post id + build log id」的层级设计的,Django的反向路由解析逻辑要求你传入所有定义的动态路径参数,才能生成正确的请求地址,不然系统不知道你要删除哪条post下的哪条build log。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:36:02