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

Django调用reverse报错:已设置router basename仍找不到对应路由怎么解决

问题原因

DRF 的路由路由器(SimpleRouter/DefaultRouter)注册 ViewSet 时,生成的路由名称规则为 {basename}-{action},不会直接用 basename 作为独立的路由名称。你注册时指定的 basename 为 organizations,实际生成的标准路由名称为:

  • 列表接口(对应 list 动作):organizations-list
  • 详情接口(对应 retrieve 动作,需要传主键/唯一标识参数):organizations-detail
    你直接调用 reverse('organizations') 时,不存在对应名称的路由,因此抛出 NoReverseMatch 错误。
解决步骤
  1. 先确认你需要跳转的路由对应动作:你当前 reverse 传入了 slug 参数,对应需要的是详情接口,将 reverse 的第一个参数改为 organizations-detail 即可,修改后的代码如下:
HttpRequest().build_absolute_uri(reverse('organizations-detail', args=(self.parent_organization.slug,))),
  1. 如果你不确定生成的路由名称,可以执行以下命令查看项目所有注册路由的完整名称:
python manage.py show_urls
额外注意事项

如果修改后仍报错,需要检查 OrganizationViewSet 中是否配置了 lookup_field = 'slug':ViewSet 默认用 pk 作为详情查询的参数名,如果你用 slug 作为唯一查询键,需要显式指定 lookup_field 为你的 slug 字段名。


内容的提问来源于stack exchange,提问作者Arka-cell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:05