2009-11-23 59 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'))