我有一個強制執行嚴格頁面順序的應用程序。如果用戶單擊後退按鈕,應用程序將檢測到亂序頁面訪問並將用戶返回到開始位置。如何渲染帶有瞬態變量的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
但這似乎有點凌亂。有沒有辦法在處理模板後自動刪除會話密鑰?也許是一件中間件?
我使用基於功能的視圖,而不是基於類,順便說一句。
,謝謝。但是我可以在哪裏放置它,以便自動調用它,而不必將它添加到每個視圖的底部? – 2015-02-09 23:09:09
這聽起來像是[context processor]的理想用法(https://docs.djangoproject.com/en/1.7/ref/templates/api/#subclassing-context-requestcontext)。 – 2015-02-09 23:14:14