2017-09-03 3 views
1

J'utilise le cache de vue pour Django 1.10. Mais j'ai des problèmes pour effacer le cache.La fonction d'effacement de cache de Django ne fonctionne pas sur le cache de vue?

@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}) 

Ensuite container_table.html crée une table impliquant container_list et chaque ligne a un élément de container_list avec un peu checkbox. Lorsque le checkbox est checked, je veux effacer le cache. Donc, essentiellement lorsque la case est cochée, un appel ajax est fait à une vue qui fait caches["container_table"].clear(). À partir des docs django, cela devrait effacer toutes les clés dans ce cache, mais cela ne fonctionne pas parce que quand je rafraîchis la page container_table.html il utilise toujours un cache. Suis-je mal compris l'utilisation de caches["container_table"].clear()?

Je pensais que tout serait clair!

+0

Vérifiez-vous la valeur de retour de votre vue? Est-il possible que cela soulève une exception? – Selcuk

+0

Aucune exception n'a été relevée. – ilikecats

Répondre

0

Le décorateur cache_page insère le résultat dans le cache APRES l'exécution du code de vue. Ainsi, même si j'ai effacé le cache en cours d'exécution de la vue, le décorateur cache_page va insérer quelque chose dans le cache juste après, et tout code regardant le cache verra au moins cette valeur en cache. Au lieu d'utiliser la mise en cache des vues, j'ai utilisé la mise en cache des modèles, et cela a fonctionné parfaitement. De plus, il est considérablement plus facile de localiser la clé utilisée pour le fragment de modèle en utilisant make_template_fragment_key. Ainsi, je n'ai pas besoin de supprimer toutes les clés dans le cache, juste la clé spécifique utilisée pour ce fragment