2010-11-22 8 views
8

Je suis cache html dans quelques modèles .: par exempleComment accéder au cache de modèles? - Django

{% cache 900 stats %} 
    {{ stats }} 
{% endcache %} 

Puis-je accéder au cache à l'aide de la bibliothèque faible niveau? par exemple.

html = cache.get('stats') 

je vraiment besoin d'avoir un certain contrôle fin sur la mise en cache du modèle :)


Toutes les idées? Merci à tous! : D

Répondre

2

En regardant le code de la cache templatetag, la clé est générée comme ceci:

args = md5_constructor(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on])) 
cache_key = 'template.cache.%s.%s' % (self.fragment_name, args.hexdigest()) 

vous pourriez donc construire quelque chose simliar dans votre vue d'obtenir le cache directement: dans votre cas, vous n'utilisez aucun paramètre vary_on afin de pouvoir utiliser un argument vide pour md5_constructor.

+0

grâce à cela, j'ai essayé 'cache.get (« template.cache.stat_table.d41d8cd98f00b204e9800998ecf8427e »)', mais il revient tout juste comme Aucun – RadiantHex

+1

je ne pourrais Ne pas le faire fonctionner à moins que j'ai fourni [] pour vary_on - mettre dans un md5_constructor vide a donné une base64 différente partie de la clé. http://stackoverflow.com/questions/4821297/django-how-to-tell-if-a-template-fragment-is-already-cached/4821681#4821681 – Ryan

6

Voici comment j'accéder au cache de modèle dans mon projet:

from django.utils.hashcompat import md5_constructor 
from django.utils.http import urlquote 

def someView(request): 
    variables = [var1, var2, var3] 
    hash = md5_constructor(u':'.join([urlquote(var) for var in variables])) 
    cache_key = 'template.cache.%s.%s' % ('table', hash.hexdigest()) 

    if cache.has_key(cache_key): 
     #do some stuff... 

La façon dont j'utiliser la balise cache, j'ai:

{% cache TIMEOUT table var1 var2 var3 %} 

Vous avez probablement juste besoin de passer une liste vide à variables. Ainsi, votre variables et cache_ key ressemblera:

variables = [] 
    hash = md5_constructor(u':'.join([urlquote(var) for var in variables])) 
    cache_key = 'template.cache.%s.%s' % ('stats', hash.hexdigest()) 
Questions connexes