我正在为我的Django应用程序使用Memcache。
在Django中,开发人员可以使用模板片段缓存来仅缓存模板的一部分。 https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching
我想知道是否有办法在views.py中明确更改模板片段缓存部分的值。例如,除了模板片段缓存之外,可以使用类似于cache.set(“sidebar”,“new value”)的方法吗?
感谢您的帮助。
答案 0 :(得分:6)
理论上,是的。首先必须使用Django使用的相同模式创建模板缓存键,这可以使用this snippet of code来完成:
from django.utils.hashcompat import md5_constructor
from django.utils.http import urlquote
def template_cache_key(fragment_name, *vary_on):
"""Builds a cache key for a template fragment.
This is shamelessly stolen from Django core.
"""
base_cache_key = "template.cache.%s" % fragment_name
args = md5_constructor(u":".join([urlquote(var) for var in vary_on]))
return "%s.%s" % (base_cache_key, args.hexdigest())
然后您可以执行cache.set(template_cache_key(sidebar), 'new content')
之类的操作来更改它。
然而,在视图中这样做有点难看。在模型更改时设置post-save signals并使缓存条目失效更有意义。
上面的代码片段适用于Django 1.2及以下版本。我不确定Django 1.3+的兼容性; django/templatetags/cache.py
将获得最新信息。
对于Django 1.7,django/core/cache/utils.py具有可用功能。