2010-11-22 24 views
8

estoy html almacenamiento en caché dentro de unas pocas plantillas ej .:¿Cómo accedo a la memoria caché de plantillas? - Django

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

¿Puedo acceder a la caché utilizando la biblioteca de bajo nivel? p.ej.

html = cache.get('stats') 

que realmente necesita tener un cierto control preciso sobre el almacenamiento en caché de la plantilla :)


¿Alguna idea? ¡Gracias a todos! : D

Respuesta

2

Mirando el código para el cache templatetag, la clave se genera de esta manera:

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()) 

por lo que podría construir algo simliar en su opinión, para obtener directamente la caché: en su caso, usted' No está utilizando ningún parámetro vary_on por lo que podría usar un argumento vacío en md5_constructor.

+0

gracias por esto, he intentado 'cache.get ('template.cache.stat_table.d41d8cd98f00b204e9800998ecf8427e')' pero simplemente vuelve atrás como Ninguno – RadiantHex

+1

no pude Hacer que esto funcione a menos que suministre [] para vary_on - poner un md5_constructor vacío dio una parte base64 diferente de la clave. http://stackoverflow.com/questions/4821297/django-how-to-tell-if-a-template-fragment-is-already-cached/4821681#4821681 – Ryan

6

Esto es cómo puedo acceder a la cache de las plantillas en mi proyecto:

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 forma en que uso la etiqueta cache, que tiene:

{% cache TIMEOUT table var1 var2 var3 %} 

Probablemente sólo tiene que pasar a una lista vacía a variables. lo tanto, su variables y cache_ key será parecida:

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