3

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

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

我想知道是否有办法在views.py中显式地更改模板片段缓存部分的值。例如,除了模板片段缓存之外,是否可以使用类似于 cache.set("sidebar", "new value") 的方法?

感谢您的帮助。

4

1 回答 1

6

理论上,是的。您首先必须以 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有一个可用的功能。

于 2011-11-11T20:08:58.950 回答