2010-11-22 3 views
8

Я кэширование HTML в течение нескольких шаблонов т.д .:Как получить доступ к кешу шаблона? - Джанго

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

Могу ли я получить доступ к кэш-памяти, используя низкий уровень библиотеку? например

html = cache.get('stats') 

мне действительно нужно иметь некоторые мелкозернистый контроль над кэшированием шаблона :)


Любые идеи? Спасибо всем! : D

ответ

2

Глядя на код для cache templatetag, ключ генерируется так:

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

, чтобы вы могли построить что-то simliar на ваш взгляд, чтобы получить кэш непосредственно: в вашем случае, вы» не используя никаких параметров vary_on, чтобы можно было использовать пустой аргумент md5_constructor.

+0

спасибо за это, я попытался 'cache.get («template.cache.stat_table.d41d8cd98f00b204e9800998ecf8427e»)', но он просто возвращается назад, как None – RadiantHex

+1

я не мог 't заставить это работать, если я не предоставил [] для vary_on - помещение пустого md5_constructor дало другую base64 часть ключа. http://stackoverflow.com/questions/4821297/django-how-to-tell-if-a-template-fragment-is-already-cached/4821681#4821681 – Ryan

6

Это, как я получить доступ к кэш шаблонов в моем проекте:

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... 

Путь я использую cache тег, у меня есть:

{% cache TIMEOUT table var1 var2 var3 %} 

Вы, вероятно, просто нужно передать пустой список до variables. Итак, ваш variables и cache_ key будет выглядеть следующим образом:

variables = [] 
    hash = md5_constructor(u':'.join([urlquote(var) for var in variables])) 
    cache_key = 'template.cache.%s.%s' % ('stats', hash.hexdigest()) 
Смежные вопросы