以前,我已经在我的 Django 模板中设置了一个缓存的 HTML 块,如下所示。
{% load cache %}
{% cache 10000 courseTable %} <!-- Cached HTML --> {% endcache %}
现在,我已经更新了此缓存内容并想要刷新它。我尝试更改时间无济于事:
{% load cache %}
{% cache 0 courseTable %} <!-- Updated Cached HTML --> {% endcache %}
在这种情况下,页面仍显示旧的缓存 HTML。
我还尝试删除与缓存关联的模板标签并重新插入它们。但是,在这种情况下,在我重新插入缓存模板标记后,内容只会恢复为最初缓存的内容。
我能做什么?我不想等待大约 2 小时来重新加载缓存。
对于 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
您只需要使用之前定义的courseTable
参数调用make_template_fragment_key
。
如果你有能力完全清空内存缓存,运行flush_all
cmd或干脆
from django.core.cache import cache
cache.clear()
否则,您必须手动生成缓存键。在密钥过期之前,不会刷新timeout
。
在 Django 1.6 之前,cache
模板标签或多或少地在标签定义的主体中构建了它的缓存键(见这里)。 从 1.6 开始,模板片段缓存键已使用 django.core.cache.utils.make_template_fragment_key
函数构建(请参阅此处)。
在任何情况下,您都可以通过使用或定义make_template_fragment_key
来删除特定的缓存片段以获取其缓存键,如下所示:
from __future__ import unicode_literals
import hashlib
from django.core.cache import cache
from django.utils.encoding import force_bytes
from django.utils.http import urlquote
TEMPLATE_FRAGMENT_KEY_TEMPLATE = 'template.cache.%s.%s'
def make_template_fragment_key(fragment_name, vary_on=None):
if vary_on is None:
vary_on = ()
key = ':'.join(urlquote(var) for var in vary_on)
args = hashlib.md5(force_bytes(key))
return TEMPLATE_FRAGMENT_KEY_TEMPLATE % (fragment_name, args.hexdigest())
def delete_cached_fragment(fragment_name, *args):
cache.delete(make_template_fragment_key(fragment_name, args or None))
delete_cached_fragment('my_fragment', 'other', 'vary', 'args')
这段代码直接从 django 代码库复制而来,因此此许可证和版权适用。