如何访问模板缓存? - Django

Rad*_*Hex 8 python django caching django-templates django-cache

我在一些模板中缓存html,例如:

{% cache 900 stats %}
    {{ stats }}
{% endcache %}
Run Code Online (Sandbox Code Playgroud)

我可以使用低级库访问缓存吗?例如

html = cache.get('stats')
Run Code Online (Sandbox Code Playgroud)

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


有任何想法吗?感谢大家!:d

kaf*_*hau 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...
Run Code Online (Sandbox Code Playgroud)

我使用cache标签的方式有:

    {% cache TIMEOUT table var1 var2 var3 %}
Run Code Online (Sandbox Code Playgroud)

你可能只需要传递一个空列表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())
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 2

查看 templatetag 的代码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())
Run Code Online (Sandbox Code Playgroud)

所以你可以在你的视图中构建一些类似的东西来直接获取缓存:在你的情况下,你没有使用任何vary_on参数,所以你可以使用一个空参数md5_constructor