gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:05:44 25 4
gpt4 key购买 nike

我正在使用 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.getSomeExpensiveData() 之前如何判断缓存是否可用?

我不能使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com