0

我希望能够在 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/ )。

在这种情况下,我希望能够在我的事件的 DetailView 上有一个删除按钮,该按钮重定向回用户导航的 ListView。

我考虑过:

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

1 回答 1

1

尝试像这样的混合:

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 }}到网址

于 2013-01-28T20:34:46.530 回答