Django DeleteView 重定向到变量位置
我想在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
在这些事件列表中,可能会有一个事件在所有列表中都出现。与其让事件的链接依赖于用户从哪个列表点击过来(比如说 /events/year/2013/53/),我选择让这个事件有一个独立的链接(比如说 /events/53/)。
在这个背景下,我希望在事件的详细页面上有一个删除按钮,点击后能返回到用户之前浏览的列表页面。
我考虑过:
- 使用中间件来查看用户之前的链接,如果是我的URL配置中的列表页面,就把这个链接添加到会话中。但这样有几个缺点,其中之一是需要把每一个可能的事件详细页面的点击来源都列入白名单。
- 在详细页面的删除按钮上,给DeleteView的链接后面加上
?next={{ request.META.HTTP_REFER }}
,然后以某种方式把它加到删除表单中,但这样会把整个来源的链接都传过去(比如说 /events/53/delete/?next=www.site.com/events/year/2013/)。
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 }}
这个部分。