2009-07-16 6 views
1

J'ai un blog écrit en Django, et j'ai commencé à utiliser le middleware de mise en cache Django de base avec le backend de mise en cache du système de fichiers. Malheureusement, cela a conduit à mettre en mémoire cache deux éléments qui n'auraient pas dû être: des liens d'administration (par exemple "Modifier cet article") pour les utilisateurs connectés et des formulaires de commentaires pré-remplis basés sur des cookies.Mise en cache Django pour un blog

Pour contourner cette difficulté, je commencé à utiliser les balises de cache de modèle:

{% load cache %} 

...admin links... 
{% cache 500 blog_entry entry.id %} 
...entry... 
{% endcache %} 
...comment form... 

Mais il semblait que la page entière était encore se cache aussi bien. Comment configurer le système de mise en cache pour seulement mettre en cache les parties du modèle que vous avez explicitement définies?

Modifier: Pour les commentaires, si quelqu'un commente sur le blog, je stocke leur nom, site web, et adresse e-mail dans les variables de session. S'ils reviennent sur le site, je préremplis ces parties du formulaire avec ces données. Mais cela signifie qu'il est possible que le système de cache cache une vue avec des données pré-remplies, ce qui n'est pas bon.

Répondre

5

Ajouter ceci à votre settings.py:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True 

Cela devrait résoudre le problème avec des liens d'administration, je ne comprends pas tout à fait ce que votre deuxième question (commentaires préremplis) est?

+0

Cela fonctionne et est simple. Les solutions complexes consisteraient à déplacer la mise en cache plus bas (les données de cache, pas la page rendue). Pas la meilleure solution, cependant. iBegin ou Curse.com mentionné toujours rendre les pages pouvant être mises en cache avec des données génériques, puis en utilisant Javascript pour insérer le contenu de l'utilisateur connecté et privilégié (lien admin, Bonjour Username, etc.). Ceci est plus complexe, mais tire vraiment parti de la mise en cache du contenu rendu. – joej

+0

@Daveyjoe - Merci! – tghw

+0

@joej - Je pourrais utiliser l'idée de JS pour faire la forme du commentaire. Merci. – tghw

7

Vous devez supprimer le middleware de mise en cache maintenant que vous mettez en cache des fragments de modèle au lieu de pages entières.