【问题标题】:Django DeleteView success_url to previous/different pageDjango DeleteView success_url 到上一个/不同的页面
【发布时间】:2022-08-19 04:01:14
【问题描述】:

我有这些网址模式:

app_name = \"posts\"
urlpatterns = [
    path(\'global/\', PostListView.as_view(), name=\'global-list\'),
    path(\'personal/\', PersonalPostListView.as_view(), name=\'personal-list\'),
    path(\'<int:pk>/\', PostDetailView.as_view(), name=\'detail\'),
    path(\'<int:pk>/delete/\', PostDeleteView.as_view(), name=\'delete\'),
]

在 PostListView、PersonalPostListView 和 PostDetailView 的每个模板中都有一个删除选项,如下所示:

<a href=\"{% url \'posts:delete\' object.id %}\">Delete</a>

我想要发生的是在删除对象后,它将重定向到单击删除链接的最后一页(详细视图除外)。因此,有以下 3 种可能的情况:

  1. 案例1:PostListView模板->点击删除->PostDeleteView确认删除模板->返回PostListView模板
  2. 案例2:PersonalPostListView模板->点击删除->PostDeleteView确认删除模板->返回PersonalPostListView模板
  3. 案例 3 (例外): PostDetailView 模板 -> 点击删除 -> PostDeleteView 确认删除模板 -> 返回 PostListView 模板

    此外,PostListView 和 PersonalPostListView 是分页的,并且 PostDeleteView 应该返回到删除帖子的页面。

    到目前为止,这是我的尝试:

    class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
        model = Post
    
        def get_success_url(self):
            return self.request.META.get(\'HTTP_REFERER\')
    

    但是,单击 PostListView 中的删除会返回 posts/15/delete/,它应该只是 posts/global/。此外,如果从 PersonalPostListView 模板中删除,它应该返回 posts/personal/ 并且 (例外) posts/global/ 如果从 PostDetailView 模板中删除。

    我想到的另一种方法是为每个模板分配不同的 DeleteViews(具有不同的 success_url)。但是,当只有success_url 应该不同时,这似乎会导致代码中的一些冗余。

    标签: python django


    【解决方案1】:

    我建议 OP 在urls.py 中使用不同的路径配置,

    path('global/<int:pk>/delete/', PostDeleteView.as_view(), name='delete-global'),
    path('personal/<int:pk>/delete/', PostDeleteView.as_view(), name='delete-personal'),
    

    然后在 OPs 视图中根据 url 重定向

    class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
        model = Post
        
       def get_success_url(self):
            if 'global' in self.request.path:
                return reverse_lazy('posts:global-list')
            else:
                return reverse_lazy('posts:personal-list')
    

    然后相应地调整&lt;a href="{% url ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2014-02-01
      • 2012-09-27
      • 2019-01-06
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多