我在几个模板中缓存html ,例如:
{% cache 900 stats %}
{{ stats }}
{% endcache %}
我可以使用低级库访问缓存吗? e.g。
html = cache.get('stats')
我真的需要对模板缓存进行一些细粒度的控制:)
有什么想法吗?谢谢大家! :d
答案 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
的空参数。