在我的首页模板中,我使用缓存函数,如下所示:
{% 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'访问。如何找到密钥名称?
答案 0 :(得分: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总和的组合。由于您没有其他参数,因此hexdigest为d41d8cd98f00b204e9800998ecf8427e
(空字符串的md5哈希值)。因此缓存密钥应该最终为
template.cache.my_posts.d41d8cd98f00b204e9800998ecf8427e
如果您需要更通用的解决方案,this snippet可能有帮助。
答案 1 :(得分:3)
请注意,上述Benjamin Wohlwend第一行中的md5_constructor
已被弃用。 Current(2011年11月)版本是:
args = hashlib.md5(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on]))
答案 2 :(得分:3)
from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key
cache.delete(make_template_fragment_key('footer'))