Как можно явно сбросить кеш фрагмента шаблона в Django?
Я использую Memcache для моего приложения Django.
В Django разработчики могут использовать кэширование фрагментов шаблона, чтобы кэшировать только часть шаблона. https://docs.djangoproject.com/en/dev/topics/cache/
Мне было интересно, если есть способ явно изменить значение раздела кэша фрагмента шаблона, скажем, в views.py. Например, можно ли использовать метод, похожий на cache.set("боковая панель", "новое значение"), кроме кеша фрагментов шаблона?
Спасибо за помощь.
1 ответ
В теории да. Сначала вы должны создать ключ кэша шаблона в том же шаблоне, который использовался 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 имеет полезную функцию.