2010-11-22 7 views
5

Su no difícil de invalidar una memoria caché de plantilla en particular en DjangoDjango - expirará caché de plantillas de Django en función de variables

def invalidate_cache_key(fragment_name, *variables): 
    args = md5_constructor(u':'.join([urlquote(var) for var in variables])) 
    cache_key = 'template.cache.%s.%s' % (fragment_name, args.hexdigest()) 
    cache.delete(cache_key) 

sin embargo tengo una situación en la que necesito para eliminar todos los fragmentos en caché que han tenido una cierta variable pasó a ellos. Por ejemplo, elimine todos los fragmentos en caché de la marca de automóviles 'Toyota'.

{% cache 100000 car_content car.brand %} 

Esencialmente hay una manera de conseguir todos los cache_keys en base a un cierto conjunto de criterios? Pensé peligrosamente en cambiar la fuente de caché, pero me preguntaba si podría haber una mejor solución para este problema.

Respuesta

0

utilizar una fecha en la clave de caché:

{% cache 100000 car_content car.brand car.brand.last_modified %} 

De esta manera todos los fragmentos se crean cada vez que la marca es modificado.

Cuestiones relacionadas