如何在Django中删除缓存的模板片段?

dan*_*007 8 django django-cache python-memcached

以前,我在Django模板中设置了一个缓存的HTML块,如下所示.

{% load cache %}            
    {% cache 10000 courseTable %} <!-- Cached HTML --> {% endcache %}
Run Code Online (Sandbox Code Playgroud)

现在,我已更新此缓存内容并想要刷新它.我试着改变时间无济于事:

{% load cache %}            
    {% cache 0 courseTable %} <!-- Updated Cached HTML --> {% endcache %}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,页面仍然显示旧的缓存HTML.

我还尝试删除与缓存相关的模板标签并重新插入它们.但是,在这种情况下,重新插入缓存模板标记后,内容只会恢复为原始缓存的内容.

我能做什么?我不想等待大约2个小时来重新加载我的缓存.

Jor*_*rdi 9

对于Django 1.6+和Django文档,你可以生成你正在寻找的部分键并删除它:

from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key

# cache key for {% cache 500 sidebar username %} templatetag
key = make_template_fragment_key('sidebar', [username])
cache.delete(key) # invalidates cached template fragment
Run Code Online (Sandbox Code Playgroud)

您只需要调用make_template_fragment_key之前定义的courseTable参数即可.


okm*_*okm 7

如果您能够完全清空memcached,请运行flush_allcmd或简单地运行

from django.core.cache import cache
cache.clear()
Run Code Online (Sandbox Code Playgroud)

否则你必须手动生成缓存键.该timeout直到密钥已过期将不被刷新.