Django项目中删除评论时动态success_url返回404问题排查
解决Django CommentDeleteView动态success_url导致的404错误
你的问题出在get_success_url方法里reverse_lazy的调用方式错误。直接把字典作为第二个参数传入时,它会被当成位置参数args处理,但你的ads:ad_detail路由应该依赖命名参数(比如path('ad/<int:ad>/', ...)格式),这就导致URL解析失败,触发404。
修正后的代码:
class CommentDeleteView(OwnerDeleteView): model = Comment template_name = "ads/comment_delete.html" def get_success_url(self): ad = self.object.ad # 通过kwargs参数传递命名路由变量 return reverse_lazy('ads:ad_detail', kwargs={'ad': ad.id})
也可以简化成:
return reverse_lazy('ads:ad_detail', kwargs={'ad': self.object.ad.id})
关键说明:
reverse_lazy中,args用于传递位置参数(比如reverse_lazy('ads:ad_detail', args=(ad.id,)))kwargs用于传递命名参数,对应你路由里定义的<int:ad>这类命名变量- 你之前的写法未指定
kwargs,字典被误判为位置参数,生成的URL不符合路由规则,因此返回404。
内容的提问来源于stack exchange,提问作者Muhammad Raffey
相关产品推荐
相关产品推荐

