0

我正在构建一个 django 应用程序,其中一个组件对于某些模型来说是简单的 CRUD。我已经创建了添加、编辑、删除、查看详细信息和列表页面。我已经给出了在列表页面上编辑和删除记录以及查看详细信息页面的按钮。由于列表页面和内部详细信息页面的编辑按钮使用相同的视图和模板,因此成功 url 可以链接回查看详细信息页面或列表页面。我想添加代码,以便如果用户从查看详细信息进入编辑页面,然后在成功时重定向回详细信息页面,但如果用户从列表页面进入编辑页面,则用户被重定向到列表页面(也是列表页面有分页,所以用户应该回到他/她所在的页面。

4

1 回答 1

5

一种方法是存储用户在会话中来自的 url,然后在成功时将它们重定向回 url。这个 mixin 可以添加到你的视图中

class RedirectToPreviousMixin:

    default_redirect = '/'

    def get(self, request, *args, **kwargs):
        request.session['previous_page'] = request.META.get('HTTP_REFERER', self.default_redirect)
        return super().get(request, *args, **kwargs)

    def get_success_url(self):
        return self.request.session['previous_page']

然后你可以在你的基于类的视图中子类化这个 mixin

class MyModelUpdateView(RedirectToPreviousMixin, UpdateView):
    model = MyModel
于 2020-06-28T19:11:50.210 回答