Функция очистки кэша в Django не работает с кешем просмотра?
Я использую кеш просмотра для Django 1.10. Но у меня проблемы с очисткой кеша.
@cache_page(60 * 30, cache="container_table")
def container_table(request, dataset):
# determine container_list by a query to the database
return render(request, 'container_table.html',{"container_list":container_list})
Затем container_table.html создает таблицу, включающую container_list, и каждая строка имеет элемент container_list
наряду с небольшим checkbox
, Когда checkbox
является checked
Хочу очистить кеш. Таким образом, по сути, когда флажок установлен, ajax-вызов делается для представления, которое делает caches["container_table"].clear()
,
Из документации django это должно очистить ВСЕ ключи в этом кеше, но это не работает, потому что когда я обновляю страницу для container_table.html, она все еще использует кеш. Я неправильно понимаю использование caches["container_table"].clear()
?
Я думал, что это все прояснит!
1 ответ
Декоратор cache_page вставляет результат в кэш ПОСЛЕ запуска кода представления. Поэтому, хотя я частично очистил кэш, выполнив представление, декоратор cache_page будет что-то вставлять в кеш сразу после этого, и любой код, просматривающий кеш позже, увидит там хотя бы одно кэшированное значение.
Вместо использования кэширования представления я использовал кэширование шаблонов, и оно работало отлично. Кроме того, значительно проще определить ключ, используемый для фрагмента шаблона, с помощью make_template_fragment_key. Таким образом, мне не нужно удалять все ключи в кеше, только конкретный, используемый для этого фрагмента