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
。当checkbox
是checked
时,我希望清除缓存。所以基本上当复选框被选中时,一个 ajax 调用是对一个执行caches["container_table"].clear()
的视图进行的。
从 django 文档中,这应该清除该缓存中的所有键,但它不起作用,因为当我刷新 container_table.html 的页面时,它仍在使用缓存。我是不是误解了caches["container_table"].clear()
的用法?
我以为它会清除一切!
【问题讨论】:
你在检查你的视图的返回值吗?是否有可能引发异常? 未引发异常。 【参考方案1】:cache_page 装饰器在视图代码运行后将结果插入缓存。因此,尽管我在执行视图的过程中清除了缓存,但 cache_page 装饰器会立即将一些内容插入缓存中,之后查看缓存的任何代码都会在其中看到至少一个缓存值。
我没有使用视图缓存,而是使用了模板缓存,而且效果很好。此外,使用 make_template_fragment_key 更容易确定用于模板片段的密钥。因此,我不必删除缓存中的所有键,只需删除用于该片段的特定键
【讨论】:
以上是关于Django的缓存清除功能对视图缓存不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
如何清除 Rails 动作缓存? (Rails.cache.clear 不起作用)
在应用程序重新启动时,inappbrowser iOS 10 中的缓存 Cookie(clearcache=no;)不起作用 - Cordova/Ionic