2009-12-30 110 views
1

我已經寫了具有以下特徵的函數後:的Django重定向到調用視圖處理功能

def action_handler(request, model): 

這action_handler是從不同的角度使用,並負責處理這方面的意見的行動。一個例子是刪除對象。在這個例子中,用戶選擇一些對象,選擇刪除操作,然後向用戶呈現一個頁面以檢查他/她是否真的要刪除所選對象。這是通過下面的代碼完成:

context = { 
        'action_name' : selected_action, 
        'object_list' : object_list, 
       } 
       return render_to_response("crm/object_delete_check.html", context, 
             context_instance=RequestContext(request)) 

對於情況不順心的事我想將用戶重定向到從用戶稱爲操作的視圖。

因此,我想問這裏是否有可能從請求對象或其他地方獲取調用視圖。

如果從視圖「contacts(request):」調用def「def action_handler(request,model):」,那麼我想將用戶重定向到視圖「contacts(request):」。

但是線索是我不想硬編碼它,因爲def action_handler是從不同的視圖調用的。使用簡單的「返回」也是不可能的,因爲我想完全回憶這個視圖。

回答

3
if goback: #goback being whatever criteria means "something went wrong" 
    default_back_url = "someurl_in_case_the_meta_is_messed_up" 
    back = request.META.get('HTTP_REFERER',default_back_url) #yeah they spelled referrer wrong 
    if back: 
     return HttpResponseRedirect(back) 
    else: 
     return HttpResponseRedirect(default_back_url) 

而META可以僞造,這是更難僞造不是GET查詢字符串。

+0

我認爲在這種情況下詢問更合適:URL是僞造還是重要?只要該網站是安全的,我一般不關心那些混淆請求的用戶。 有一點可能是一個問題,如果HTTP_REFERER阻止是常見的。我不認爲它是。 –

0

您可以通過GET參數傳遞前一頁網址:

/object_delete_check/?previous=/contacts/ 

(見contrib.auth.decorators.login_required例如)