Как явно сбросить кеш фрагмента шаблона в Django? - PullRequest
3 голосов
/ 12 ноября 2011

Я использую Memcache для своего приложения Django.

В Django разработчики могут использовать кэширование фрагментов шаблона только для кэширования части шаблона.https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching

Мне было интересно, есть ли способ явно изменить значение раздела кэша фрагмента шаблона, например, в views.py.Например, можно ли использовать метод, похожий на cache.set («боковая панель», «новое значение»), кроме кеша фрагментов шаблона?

Спасибо за помощь.

1 Ответ

6 голосов
/ 12 ноября 2011

В теории да.Сначала вы должны создать ключ кэша шаблона в том же шаблоне, который использовался 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 имеет полезную функцию.

...