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

Posted

技术标签:

【中文标题】Django的缓存清除功能对视图缓存不起作用?【英文标题】:Django's cache clear function does not work on view cache? 【发布时间】: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()的用法?

我以为它会清除一切!

【问题讨论】:

你在检查你的视图的返回值吗?是否有可能引发异常? 未引发异常。 【参考方案1】:

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

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

【讨论】:

以上是关于Django的缓存清除功能对视图缓存不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

具有特定规则时,Cloud-flare 缓存清除不起作用

如何清除 Rails 动作缓存? (Rails.cache.clear 不起作用)

开发人员工具中的禁用缓存选项不起作用

Angular 2/4 模板缓存破坏不起作用

在应用程序重新启动时,inappbrowser iOS 10 中的缓存 Cookie(clearcache=no;)不起作用 - Cordova/Ionic

gitignore不起作用