我正在创建一个博客,我希望confirm delete comment
位于以下网址路由post/<int:id>/comment/<int:pk>/
上,但是当我这样做时,浏览器显示以下错误
找不到带有参数'(38,)'的'comment'的反向。 1个图案 尝试过:['post /(?P [0-9] +)/ comment /(?P [0-9] +)/ $']
该程序的代码如下。我要这样做的原因是删除完成后能够重定向到post-detail
视图
views.py
class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = comment
success_url = '/'
def test_func(self):
comment = self.get_object()
if self.request.user == comment.user:
return True
return False
models.py
class comment(models.Model):
post=models.ForeignKey(Blog, on_delete=models.CASCADE)
user=models.ForeignKey(User, on_delete=models.CASCADE)
content=models.TextField(max_length=160)
timestamp=models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{}-{}'.format(self.post.title,str(self.user.username))
def get_absolute_url(self):
return reverse('post-detail', kwargs={"pk": self.pk})
urls.py
path('post/<int:id>/comment/<int:pk>/', views.comment_detail, name='comment'),
path('post/<int:id>/comment/<int:pk>/delete', views.CommentDeleteView.as_view(), name='comment-delete'),
答案 0 :(得分:1)
您的URL需要两个参数,因此您需要将两个参数传递给reverse
。
def get_absolute_url(self):
return reverse('post-detail', kwargs={"id": self. post_id, "pk": self.pk})
请注意,id
和pk
通常是同一意思;您可能应该在网址格式中使用更清晰的名称,例如post_id
和comment_id
。