如何访问模板缓存? - Django

时间:2010-11-22 11:47:52

标签: python django caching django-templates django-cache

我在几个模板中缓存html ,例如:

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

我可以使用低级库访问缓存吗? e.g。

html = cache.get('stats')

我真的需要对模板缓存进行一些细粒度的控制:)


有什么想法吗?谢谢大家! :d

2 个答案:

答案 0 :(得分: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和缓存_ key将如下所示:

    variables = []
    hash = md5_constructor(u':'.join([urlquote(var) for var in variables]))
    cache_key = 'template.cache.%s.%s' % ('stats', hash.hexdigest())

答案 1 :(得分: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的空参数。