2012-09-05 49 views
3

在我的Django项目我创建了一个链接到管理界面,使用户可以编辑对象:加入`next`网址Django管理变更链接

<a href="{% url admin:mode_change object.id %}">modify object</a> 

这工作得很好,但用户完成后,编辑管理界面中的对象,我很想自动将用户带回原始URL(或其他URL)。目前,在用户修改对象之后,她/他最终在管理界面中查看所有model条目。

有没有办法提供一个管理链接的返回网址?

回答

7

这似乎工作:

admin.py: 
class ModelAdmin(admin.ModelAdmin): 
    form = ModelForm 

    def response_change(self, request, obj): 
     res = super(ModelAdmin, self).response_change(request, obj) 
     if "next" in request.GET: 
      return HttpResponseRedirect(request.GET['next']) 
     else: 
      return res 

,并在模板(其中currentUrl在视图中产生的变动):

<a href="{% url admin:mode_change object.id %}?next={{ currentUrl }}">modify object</a> 
+2

这使你到一个开放式重定向攻击开放。 https://www.owasp.org/index.php/Open_redirect。使用django.utils.http.is_safe_url。另外,在模板中,您可以{{request.get_full_path | urlencode}}而不是{{currentUrl}}。此外,即使保存不成功,也会执行重定向 – spookylukey

+0

糟糕,我的最后一点不正确。 – spookylukey

+0

@spookylukey你有更好的选择吗? – Private