2017-09-03 91 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来精确定位用于模板片段的密钥相当容易。因此,我不必删除缓存中的所有密钥,只是用于该片段的特定密钥