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

Другие вопросы по тегам