Django的缓存清除功能对视图缓存不起作用?

时间:2017-09-03 22:07:17

标签: jquery ajax django python-2.7 django-cache

我正在使用Django 1.10的视图缓存。但是我在清除缓存时遇到了问题。

@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时,我希望缓存清除。因此,当选中复选框时,会对执行caches["container_table"].clear()的视图进行ajax调用。

从django文档中,这应该清除该缓存中的所有键,但它不起作用,因为当我刷新 container_table.html 的页面时,它仍在使用缓存。我误解了caches["container_table"].clear()的用法吗?

我认为它会清除一切!

1 个答案:

答案 0 :(得分:0)

cache_page装饰器在视图代码运行后将结果插入缓存中。因此,尽管我通过执行视图中途清除了缓存,但cache_page装饰器会在之后立即向缓存中插入一些内容,之后查看缓存的任何代码都会在其中看到至少一个缓存值。

我没有使用视图缓存,而是使用了模板缓存,它运行得很好。另外,使用make_template_fragment_key可以更容易地确定用于模板片段的密钥。因此,我不必删除缓存中的所有密钥,只需删除用于该片段的特定密钥