【问题标题】:Django's cache clear function does not work on view cache?Django的缓存清除功能对视图缓存不起作用?
【发布时间】:2018-02-12 04:05:50
【问题描述】:

我正在使用 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 时,我希望清除缓存。所以基本上当复选框被选中时,一个 ajax 调用是对一个执行caches["container_table"].clear() 的视图进行的。

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

我以为它会清除一切!

【问题讨论】:

  • 你在检查你的视图的返回值吗?是否有可能引发异常?
  • 未引发异常。

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


【解决方案1】:

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

我没有使用视图缓存,而是使用了模板缓存,而且效果很好。此外,使用 make_template_fragment_key 更容易确定用于模板片段的密钥。因此,我不必删除缓存中的所有键,只需删除用于该片段的特定键

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多