2009-11-23 60 views
6

在我前面的頁面模板我使用緩存功能是這樣的:如何在接收信號時過期django模板緩存鍵?

{% cache 86400 my_posts %} 
    {% get_latest_posts %} 
{% endcache %} 

當有一個新的崗位,我想過期緩存鍵;像這樣:

def clear_post_cache(): 
    cache.delete('my_posts') 

post_save.connect(clear_post_cache, sender=Post) 

我的問題是緩存密鑰不能作爲'my_posts'訪問。我如何找到關鍵名稱?

回答

16

看一看緩存關鍵是如何constructed

args = md5_constructor(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on])) 
cache_key = 'template.cache.%s.%s' % (self.fragment_name, args.hexdigest()) 

的關鍵是片段的名稱(my_posts)和附加參數的MD5總和緩存標籤的組合。由於您沒有附加參數,因此十六進制爲d41d8cd98f00b204e9800998ecf8427e(空字符串的md5散列)。因此,緩存鍵應該結束了是

template.cache.my_posts.d41d8cd98f00b204e9800998ecf8427e 

如果你需要一個更通用的解決方案,this snippet可能的幫助。

3

請注意,上面Benjamin Wohlwend例子的第一行中的md5_constructor已被棄用。目前(2011年11月)版本爲:

args = hashlib.md5(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on])) 
2
from django.core.cache import cache 
from django.core.cache.utils import make_template_fragment_key 

cache.delete(make_template_fragment_key('footer'))