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

使用DRF DefaultRouter时无法通过reverse获取URL

问题解决:Reverse for 'notes' not found

当使用Django REST Framework的DefaultRouter注册ModelViewSet时,路由系统会自动生成多个URL模式,每个模式都有特定的命名规则,不能直接用注册的前缀名称(比如这里的notes)来执行reverse。

错误原因

DefaultRouter为NoteModelViewSet生成的URL名称带有固定后缀:

  • 获取所有notes的列表视图,对应名称是notes-list
  • 单个note的详情视图(含GET/PUT/PATCH/DELETE操作),对应名称是notes-detail
  • 其他动作也会生成对应命名,比如notes-create

你直接调用reverse('notes')找不到匹配路由,因为这个名称并不存在。

解决方案

  1. 使用正确的路由名称执行reverse,针对获取所有notes的接口,应该用notes-list:
    修改测试代码如下:
def test_get_all_notes_path(self):
        url = reverse('notes-list')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
  1. 若不确定生成的路由名称,可以在urls.py中添加打印语句查看完整路由信息:
router = DefaultRouter()
router.register("notes",views.NoteModelViewSet)

# 打印所有生成的路由及其命名
print(router.urls)

运行项目时会输出所有路由详情,从中可以确认每个接口对应的正确命名。

内容的提问来源于stack exchange,提问作者Pankaj Singh Rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:45:36