2012-09-05 47 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