如何在接收信号时使django模板缓存密钥到期?

Hob*_*use 6 django templates caching

在我的首页模板中,我使用缓存函数,如下所示:

{% cache 86400 my_posts %}
    {% get_latest_posts %}
{% endcache %}
Run Code Online (Sandbox Code Playgroud)

当有新帖子时我想使缓存密钥失效; 像这样:

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

post_save.connect(clear_post_cache, sender=Post)
Run Code Online (Sandbox Code Playgroud)

我的问题是缓存键不能作为'my_posts'访问.如何找到密钥名称?

Ben*_*end 16

看看如何构造缓存键:

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())
Run Code Online (Sandbox Code Playgroud)

关键是片段名称(my_posts)和缓存标记的其他参数的md5总和的组合.由于您没有其他参数,因此hexdigest是d41d8cd98f00b204e9800998ecf8427e(空字符串的md5哈希值).因此缓存密钥最终应该是

template.cache.my_posts.d41d8cd98f00b204e9800998ecf8427e
Run Code Online (Sandbox Code Playgroud)

如果您需要更通用的解决方案,此代码段可能有所帮助.