2012-06-21 98 views
-1

我意識到這是一個已知的problem, problem但我仍然沒有找到足夠的解決方案。Django i18n和緩存干擾

我想用@cache_page在我的Django的一個應用程序的一些看法,比如:

@cache_page(24 * 60 * 60) 
def some_view(request): 
    ... 

的問題是,我也是用國際化了的語言切換器來切換每個頁面的語言。所以,如果我打開緩存,我不會得到我期望的結果。看起來我得到了最後一個緩存頁面。

我已經試過這樣:

@cache_page(24 * 60 * 60) 
@vary_on_headers('Content-Language', 'Accept-Language') 
def some_view(request): 
    ... 

編輯 ...這:

@cache_page(24 * 60 * 60) 
@vary_on_cookie 
def some_view(request): 
    ... 

編輯完

,但我得到了相同的結果。

當然,如果我刪除緩存一切都按預期工作。

任何幫助將不勝感激。

+1

語言設置通常存儲在cookie中。你有沒有試過\ @vary_on_cookie?或者你可能需要一個自定義的\ @ vary裝飾器.. – Tisho

+0

是的,我已經嘗試過@ @ vary_on_cookie'。同樣的結果。沒有一個簡單的解決方案,我無法相信這是一個問題。使用緩存+ i18n肯定不會少見? –

+0

我剛做了一個小測試。對我來說,緩存似乎按預期工作。 Django文檔中也描述了這種情況,即當USE_I18N = True和USE_L10N = True時,區域設置標識將附加到緩存鍵。那麼,你能描述一下究竟發生了什麼 - 嘗試加載緩存的頁面時,以及更改語言環境後,會收到哪些http標題?它是否從本地瀏覽器的緩存中加載?服務器返回302/Not Modified標頭嗎?你使用哪個Django版本? – Tisho

回答

0

好吧 - 似乎有瀏覽器緩存問題,而不是Django本身。我後來發現關閉開發中的所有瀏覽器緩存很有用(看起來很明顯,我知道)。