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

Django多参数URL反向解析报错:无法匹配post_detail路由

解决Django反向解析post_detail的报错问题

嘿,别担心!新手刚接触Django的URL反向解析时,遇到这种问题太常见了,我帮你一步步排查~

首先我们先拆解报错信息:

Reverse for 'post_detail' with arguments '(<Story: Story 1>, '')' not found. 1 pattern(s) tried: ['story/(?P<work>[0-9]+)/post/(?P<pk>[0-9]+)/$']

这个报错的核心点是:你传给post_detail的参数不符合URL规则的要求——URL规则明确要求两个整数类型的参数(work和pk),但你传的是一个Story对象(<Story: Story 1>)和一个空字符串,这显然不匹配。

问题根源与解决步骤

  1. 明确URL规则的要求
    你的post_detail对应的URL路径是story/<int:work>/post/<int:pk>/,意味着反向解析时必须传入两个整数:

    • work:对应Story对象的主键ID(int类型)
    • pk:对应Post对象的主键ID(int类型)
  2. 修正反向解析的调用代码
    检查你在模板或视图中调用反向解析的地方,把参数改成对象的主键值:

    • 如果是在Django模板里:
      # 位置参数写法
      {% url 'post_detail' story.id post.pk %}
      # 或者更清晰的关键字参数写法(推荐)
      {% url 'post_detail' work=story.id pk=post.pk %}
      
    • 如果是在Python视图/代码里用reverse函数:
      # 位置参数写法
      from django.urls import reverse
      reverse('post_detail', args=(story.id, post.pk))
      # 关键字参数写法
      reverse('post_detail', kwargs={'work': story.id, 'pk': post.pk})
      
  3. 额外检查点

    • 确保你要传递的Story和Post对象都已经保存到数据库(有有效的主键值,不是临时未保存的对象)
    • 确认post_detail视图函数/类视图确实接收work和pk这两个参数,并且逻辑正确

这样调整后,反向解析应该就能正常匹配到URL规则啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:08:39