2015-02-09 84 views
0

我有一個強制執行嚴格頁面順序的應用程序。如果用戶單擊後退按鈕,應用程序將檢測到亂序頁面訪問並將用戶返回到開始位置。如何渲染帶有瞬態變量的Django模板?

我想通過將用戶重定向到正確的頁面並顯示彈出式JavaScript警告框告訴他們不要使用「後退」按鈕,使其更友好一些。

我已經使用了一個函數,它執行了很多有效性檢查,如果請求沒問題,它會返回None,或者如果請求無效,則返回HttpResponseRedirect到另一個頁面(通常是錯誤頁面或登錄頁面)。我所有的意見都在上面這段代碼:

response = validate(request) 
if response: 
    return response 

所以,既然我有這個的validate()函數已經,這似乎是一個好地方,添加此額外的代碼檢測出序訪問。

但是,由於無序檢測標誌必須在重定向中生存,我不能只設置一個視圖變量;我必須在會話數據中設置標誌。但我當然不希望永久性地在會話數據中設置標誌;我想在處理模板後從會話數據中刪除標誌。

我可以添加如下代碼到我所有的渲染電話:

back_button = request.session.get('back_button', False) 
response = render(request, 'foo.html', { 'back_button': back_button }) 
if back_button: 
    del request.session['back_button'] 
return response 

但這似乎有點凌亂。有沒有辦法在處理模板後自動刪除會話密鑰?也許是一件中間件?

我使用基於功能的視圖,而不是基於類,順便說一句。

回答

1

會話對象使用字典界面,讓您可以使用pop代替get檢索和刪除在同一時間的關鍵是:這比我的例子更緊湊

back_button = request.session.pop('back_button', False) 
+0

,謝謝。但是我可以在哪裏放置它,以便自動調用它,而不必將它添加到每個視圖的底部? – 2015-02-09 23:09:09

+0

這聽起來像是[context processor]的理想用法(https://docs.djangoproject.com/en/1.7/ref/templates/api/#subclassing-context-requestcontext)。 – 2015-02-09 23:14:14