python - Django - 如何判断模板片段是否已被缓存?

标签 python django google-app-engine

我正在使用 Django 的 Template Fragment Caching所以在 template.html 文件中

{% extends 'base.html' %}
{% load cache %}
{% block content %}
  {% cache 500 "myCacheKey" %}
     My html here...
  {% endcache %}
{% endblock %}

这工作正常 - 我可以看到它正在被缓存并命中,但 View 正在做一些昂贵的事情来向该 View 提供数据,并且每次都会被调用。

在views.py中

def index(request)
   data = api.getSomeExpensiveData()
   return render_to_response('template.html', {'data':data} )

那么在调用 api.getSomeExpectiveData() 之前如何判断缓存是否可用?

我无法使用cache.get('myCacheKey'),因为找不到缓存 - 它是否使用某种命名方案,如果是的话,我可以使用类似的东西

cache.get(cache.getTemplateFragmentKey("myCacheKey"))

cache.getTemplateFragment("myCacheKey")

最佳答案

如果您不在 View 中使用该数据,那么像这样简单的事情可能会起作用:

def index(request)
   get_data = api.getSomeExpensiveData
   return render_to_response('template.html', {'get_data':get_data} )

在模板中

{% block content %}
  {% cache 500 "myCacheKey" %}
     {{ get_data.something }}
     Or maybe
     {% for something in get_data %}
     {% endfor %}
  {% endcache %}
{% endblock %}

Django 模板自动调用所有可调用对象。

编辑:

如果您需要在模板中多次使用 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()} )

关于python - Django - 如何判断模板片段是否已被缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821297/

相关文章:

python - 有没有办法对管理模型中的列进行排序? Django

django - 自定义 Django 404 错误

python - Google AppEngine 无法将发送邮件作业推迟到默认任务队列,收到未经授权的发件人错误

google-app-engine - AppEngine NDB 查询过滤器

python - Django 查询集缓存与exists() 和values_list()

python - 图像分割中的轮廓补全

python - 当我在 NLTK Python 中导入 nltk.corpus.framenet 时,导入错误

python - 如果不满足条件,则在导入时引发异常

java - 如何基于 Google Cloud Endpoints 为 API 编写测试?

python - 扩展pandas数据框并合并列