8

I am caching html within a few templates e.g.:

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

Can I access the cache using the low level library? e.g.

html = cache.get('stats')

I really need to have some fine-grained control over the template caching :)


Any ideas? Thanks everyone! :D

4

2 回答 2

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())
于 2010-11-22T12:34:03.243 回答
2

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

于 2010-11-22T12:12:42.697 回答