Django 如何在DeleteView中配置重定向

Django 如何在DeleteView中配置重定向,django,python-3.x,django-views,Django,Python 3.x,Django Views,当我试图删除一些评论时,它首先将我带到comment_delete_confirm.html,然后重定向到success_url='/blog/'中链接的页面。当我将success\u url更改为类似“post detail”(因为我想在评论之后删除\u确认返回到帖子)时,问题就出现了,它找不到这个页面,因为在brauser url中它看起来是这样的:“127.0.0.1:8000/blog/post/18/comment\u delete/post detail” 这是my views.py

当我试图删除一些评论时,它首先将我带到comment_delete_confirm.html,然后重定向到success_url='/blog/'中链接的页面。当我将success\u url更改为类似“post detail”(因为我想在评论之后删除\u确认返回到帖子)时,问题就出现了,它找不到这个页面,因为在brauser url中它看起来是这样的:“127.0.0.1:8000/blog/post/18/comment\u delete/post detail”

这是my views.py和url.py文件:

class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Comment
    success_url = 'post-detail'
    # only the author can delete his post
    # if not author try to delete post it gives 403 forbidden
    def test_func(self):
        comment = self.get_object()
        if self.request.user == comment.user:
            return True
        return False

urlpatterns = [
    path('', PostListView.as_view(), name='blog-home'),
    path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),
    path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('post/new/', PostCreateView.as_view(), name='post-create'),
    path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
    path('post/<int:pk>/comment/', add_comment, name='comment-create'),
    path('post/<int:pk>/comment_update/', comment_update, name='comment-update'),
    path('post/<int:pk>/comment_delete/', CommentDeleteView.as_view(), name='comment-delete')
]
class CommentDeleteView(LoginRequiredMixin、UserPasseStMixin、DeleteView):
模型=注释
成功\u url='发布详细信息'
#只有作者才能删除他的帖子
#如果不是作者,请尝试删除帖子,否则将被禁止
def测试功能(自身):
comment=self.get_object()
如果self.request.user==comment.user:
返回真值
返回错误
URL模式=[
路径(“”,PostListView.as_view(),name='blog-home'),
路径('user/',UserPostListView.as_view(),name='user-posts'),
路径('post/',PostDetailView.as_view(),name='post-detail'),
路径('post/new/',PostCreateView.as_view(),name='post-create'),
路径('post//update/',PostUpdateView.as_view(),name='post-update'),
路径('post//delete/',PostDeleteView.as_view(),name='post-delete'),
路径('post//comment/',add_comment,name='comment-create'),
路径('post//comment\u update/',comment\u update,name='comment-update'),
路径('post//comment\u delete/',CommentDeleteView.as\u view(),name='comment-delete')
]

您需要使用实际的URL,而不是名称。你可以用这个

from django.urls import reverse_lazy

class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Comment
    success_url = reverse_lazy('post-detail')
编辑

如果需要动态数据,可以重写
get\u success\u url
方法,而不是直接定义属性。您可以访问
self.object
(因为该方法是在实际处理删除之前调用的)。假设您的评论对象有一个
post
字段,该字段是要发布的外键:

def get_success_url(self):
    return reverse('post-detail', kwargs={'pk': self.object.post_id}) 

我有一个问题:'反向为'后细节'没有参数找不到。尝试了1个模式:['blog\\/post\\/(?P[0-9]+)\\/$']。我知道我必须在“成功url”中添加“pk”,但如何添加?