Django中使用get_absolute_url()表单跳转报NoReverseMatch错误求助
解决Django中get_absolute_url的NoReverseMatch错误
你的问题根源在两个细节上:
1. 未使用应用命名空间
你的urls.py里设置了app_name = 'my_blog',这意味着所有URL名称都归属这个命名空间,调用reverse时必须带上命名空间前缀,否则Django无法匹配到对应的视图。
2. reverse的参数格式错误
reverse的args参数要求传入元组,你当前写的(str(self.id))只是单个字符串,不是元组,必须在末尾添加逗号才能被识别为元组。另外,你的详情页URL定义的是<int:pk>参数,直接使用self.pk更贴合逻辑,无需转成字符串。
修改models.py中的get_absolute_url方法
将原方法替换为以下任意一种写法即可:
# 推荐用kwargs,可读性更强 def get_absolute_url(self): return reverse('my_blog:post-detail', kwargs={'pk': self.pk})
或者:
# 修正args的元组格式 def get_absolute_url(self): return reverse('my_blog:post-detail', args=(self.pk,))
补充说明
CreateView会自动调用模型的get_absolute_url方法完成跳转,修改后用户提交表单就能正常跳转到新创建文章的详情页。
内容的提问来源于stack exchange,提问作者Alireza Boostaneh
相关产品推荐
相关产品推荐

