Django - 如何判断一个模板片段是否已被缓存? [英] Django - how to tell if a template fragment is already cached?
问题描述
我正在使用Django的模板片段缓存所以在一个template.html文件中
{%extends'base.html'%}
{%load cache%
{%block content%}
{%cache 500myCacheKey%}
我的html这里...
{%endcache%}
{%endblock %}
这工作正常 - 我可以看到它正在缓存并点击,但视图正在做某事提供数据到这个视图是昂贵的,并且每次都被调用。
在views.py
def index(request)
data = api.getSomeExpensiveData()
return render_to_response('template.html',{'data':data})
那么如何判断缓存在调用api.getSomeExpensiveData()之前是否可用?
我无法使用cache.get('myCacheKey')作为缓存未找到 - d它使用一些命名方案,如果是这样,我可以使用类似于
cache.get(cache.getTemplateFragmentKey(myCacheKey ))
或
cache.getTemplateFragment(myCacheKey)
如果您不在视图中使用该数据,则可能会很简单:
def index(request )
get_data = api.getSomeExpensiveData
返回render_to_response('template.html',{'get_data':get_data})
在模板中
{%block content%}
{%cache 500 myCacheKey%}
{{get_data.something}}
或者也可以
{%for get_data%}
{%endfor%}
{%endcache %}
{%endblock%}
Django模板自动调用所有可调用对象。 p>
编辑:
如果您需要在模板中多次使用get_data,则需要一些包装。与此相似的东西:
def index(request)
class get_data(object):
data = False
def __call __(self):
if not self.data:
self.data = api.getSomeExpensiveData()
return self.data
return render_to_response(' template.html',{'get_data':get_data()})
I am using Django's Template Fragment Caching so in a template.html file
{% extends 'base.html' %}
{% load cache %}
{% block content %}
{% cache 500 "myCacheKey" %}
My html here...
{% endcache %}
{% endblock %}
This is working fine - I can see it's getting cached and hit but the view is doing something expensive to provide data to this view and thats getting called every time.
In views.py
def index(request)
data = api.getSomeExpensiveData()
return render_to_response('template.html', {'data':data} )
So how do I tell if the cache is avail before the call to api.getSomeExpensiveData()?
I can't use cache.get('myCacheKey') as the cache isn't found - does it use some naming scheme and if so can I either use something like
cache.get(cache.getTemplateFragmentKey("myCacheKey"))
or
cache.getTemplateFragment("myCacheKey")
If you do not use that data in your view, something as simple as this might work:
def index(request)
get_data = api.getSomeExpensiveData
return render_to_response('template.html', {'get_data':get_data} )
In template
{% block content %}
{% cache 500 "myCacheKey" %}
{{ get_data.something }}
Or maybe
{% for something in get_data %}
{% endfor %}
{% endcache %}
{% endblock %}
Django template automatically calls all callable objects.
EDIT:
If you need to use get_data more than once in your template you'll need some wrapper. Something similar to this:
def index(request)
class get_data(object):
data = False
def __call__(self):
if not self.data:
self.data = api.getSomeExpensiveData()
return self.data
return render_to_response('template.html', {'get_data':get_data()} )
这篇关于Django - 如何判断一个模板片段是否已被缓存?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!