Как получить доступ к кэшу шаблонов?- Джанго - PullRequest
8 голосов
/ 22 ноября 2010

Я кэширую HTML в нескольких шаблонах, например ::10000 *

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

Можно ли получить доступ к кешу с помощью библиотеки low level ? например, * +1008 *

html = cache.get('stats')

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


Есть идеи? Спасибо всем! : D

Ответы [ 2 ]

6 голосов
/ 22 ноября 2010

Вот как я получаю доступ к кешу шаблонов в моем проекте:

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())
2 голосов
/ 22 ноября 2010

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

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

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

...