2017-09-03 119 views
1

我正在使用Django 1.10的視圖緩存。但是我在清除緩存時遇到問題。Django的緩存清除功能在視圖緩存上不起作用?

@cache_page(60 * 30, cache="container_table") 
def container_table(request, dataset): 
    # determine container_list by a query to the database 
    return render(request, 'container_table.html',{"container_list":container_list}) 

然後container_table.html創建涉及container_list一個表,每一行具有container_list用少量checkbox沿着一個元素。當checkboxchecked時,我想清除緩存。所以基本上,當複選框被選中時,一個ajax調用被做到caches["container_table"].clear()的視圖。

從django文檔中,這應該清除該緩存中的所有鍵,但它不起作用,因爲當我刷新頁面時,它仍在使用緩存。我誤解了caches["container_table"].clear()的用法嗎?

我以爲它會清除一切!

+0

您是否正在檢查視圖的返回值?它是否有可能引發異常? – Selcuk

+0

沒有發生異常。 – ilikecats

回答

0

cache_page修飾符將結果插入視圖代碼運行後的緩存中。因此,雖然我通過執行視圖中途清除了緩存,但緩存頁面修飾器會在後面插入一些內容到緩存中,然後任何查看緩存的代碼都會在其中看到至少一個緩存值。

我沒有使用視圖緩存,而是使用了模板緩存,並且它工作得很完美。另外,通過使用make_template_fragment_key來精確定位用於模板片段的密鑰相當容易。因此,我不必刪除緩存中的所有密鑰,只是用於該片段的特定密鑰