Django DeleteView重定向到变量位置

时间:2013-01-28 15:49:13

标签: python django

我希望能够在Django 1.5c1中使用DeleteView CBV(包括确认页面),但是可以将用户重定向到他/她点击对象的位置。

例如,以下是基于事件的网站结构的大致轮廓:

/events/week/2013/03/   - ListView, shows 3rd week of 2013's Events
/events/month/2013/01/  - ListView, shows January of 2013's Events
/events/year/2013/      - ListView, show 2013's Events
/events/53/             - DetailView, shows a specific Event

在任何这些活动列表中,我都可以看到所有活动。而不是让事件的URL取决于用户导航的列表(例如/ events / year / 2013/53 /),我选择让事件在独立的URL上提供(例如/ events / 53 / )。

在上下文中,我希望能够在我的Event的DetailView上有一个删除按钮,该按钮会重定向回用户导航的ListView。

我考虑过:

  • 中间件,如果它是我的URLconf中的ListView,它将查看以前的URL并将其添加到会话中。这有几个缺点,其中一个缺点是需要将可以单击事件的DetailView的每个可能位置列入白名单。
  • 在DetailView上的删除按钮上,将?next={{ request.META.HTTP_REFER }}附加到DeleteView的URL并以某种方式将其添加到删除表单中,但传递整个引用者的URL(例如/ events / 53 / delete /?next = www。 site.com/events/year/2013 /).

1 个答案:

答案 0 :(得分:1)

尝试这样的东西作为mixin:

class RedirectURLView(View):

    def get_success_url(self):
        next_url = self.request.GET.get('next')

        if next_url:
            return next_url
        else:
            return super(RedirectURLView, self).get_success_url()

然后将?next={{ request.path }}附加到网址