如何在Django中显式重置模板片段缓存



我正在为我的Django应用程序使用Memcache。

在Django中,开发者可以使用模板片段缓存只缓存模板的一部分。https://docs.djangoproject.com/en/dev/topics/cache/template-fragment-caching

我想知道是否有一种方法可以显式地改变模板片段缓存部分的值,在views.py中说。例如,可以使用类似于缓存的方法吗?设置("侧边栏","新值")除了模板片段缓存?

谢谢你的帮助。

理论上是的。首先,你必须以与Django相同的模式创建一个模板缓存键,这可以用下面的代码片段来完成:

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')的事情来改变它。

然而,在视图中这样做有点难看。当模型发生变化时,设置保存后信号和过期缓存条目更有意义。

以上代码片段适用于Django 1.2及以下版本。我不确定Django 1.3+的兼容性;django/templatetags/cache.py有最新的信息

对于Django 1.7, Django/core/cache/utils.py有一个可用的函数

相关内容

  • 没有找到相关文章

最新更新