2010-11-22 15 views
5

La sua non è difficile invalidare una particolare cache del modello in DjangoDjango - scadenza cache del modello Django in base a variabili

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) 

però ho una situazione in cui ho bisogno di eliminare tutti i frammenti memorizzati nella cache che hanno avuto una certa variabile passato a loro. Ad esempio, elimina tutti i frammenti memorizzati nella cache relativi al marchio automobilistico "Toyota".

{% cache 100000 car_content car.brand %} 

In sostanza esiste un modo per ottenere tutti i cache_keys in base a un determinato insieme di criteri? Ho pensato pericolosamente a cambiare il sorgente della cache, ma mi chiedevo se ci potesse essere una soluzione migliore a questo problema.

risposta

0

utilizzare una data nella chiave di cache:

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

In questo modo tutti i frammenti vengono creati ogni volta che il marchio viene modificato.