如何访问模板缓存?- Django

8 投票
2 回答
2204 浏览
提问于 2025-04-16 07:26

我在一些模板中缓存 HTML,比如:

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

我可以使用低级库来访问这个缓存吗?比如:

html = cache.get('stats')

我真的需要对模板缓存有更细致的控制 :)


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

2 个回答

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传一个空的参数。

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

撰写回答