请求解决Django中使用reverse_lazy调用DetailView时出现'Reverse for 'cbvdetail' not found'错误的问题
解决Django中Reverse for 'cbvdetail' not found的问题
嘿,我帮你揪出问题根源啦!你在urls.py里设置了app_name='todoapp',这意味着所有URL模式都归属于todoapp这个命名空间,但在Updateview的get_success_url方法里调用reverse_lazy时,没带上这个命名空间前缀,导致Django找不到对应的cbvdetail视图。
具体修复步骤:
修正
Updateview的跳转逻辑
把get_success_url方法里的代码改成带命名空间的格式:def get_success_url(self): return reverse_lazy("todoapp:cbvdetail", kwargs={'pk': self.object.id})加上
todoapp:前缀后,Django就能精准定位到对应应用下的cbvdetailURL模式了。要是想让代码更灵活(比如后续修改
app_name不用同步改这里),也可以动态获取当前命名空间:def get_success_url(self): return reverse_lazy(f"{self.request.resolver_match.namespace}:cbvdetail", kwargs={'pk': self.object.id})额外优化:避免URL名称冲突
我注意到你的Tasklistview的URL名称也是home,和前面函数视图的path('',views.home,name='home')重名了,虽然现在没报错,但容易混淆,建议改成:# urls.py中的cbvhome路径 path('cbvhome/',views.Tasklistview.as_view(),name='cbvhome'),
验证效果:
修改完重新启动项目,更新任务后应该能正常跳转到详情页面,不会再出现Reverse for 'cbvdetail' not found的错误啦。
内容的提问来源于stack exchange,提问作者aswin
相关产品推荐
相关产品推荐

