如何在django中缓存查询结果并使用它?
How to cache query results in django and use it?
我有一个小请求,数据从中传输到<select>
。我使用分页器,这个选择器每隔 page.So 发出一个请求我想缓存它并尝试每 10 分钟更新一次,因为 example.How 我是否保存缓存以及如何将它传递给模板所以选择器有效吗?
views.py
contractors = Contractors.objects.values_list('name', flat='True')
HTML-代码
<select name="contractorName" class="form-control" id="id_contractorName">
<option value="" selected=""></option>
{% for contractor in contractors %}
<option value="{{ contractor }}">{{ contractor }}</option>
{% endfor %}
</select>
您可以为此尝试使用 django-cachalot。它缓存服务的数据,并在数据更改时立即使缓存失效。
根据 django cache framework
,您可以通过多种方式做到这一点。
这是一个关于如何制作 template fragment
缓存的示例:
{% load cache %}
{% cache 600 contractors %}
<select name="contractorName" class="form-control" id="id_contractorName">
<option value="" selected=""></option>
{% for contractor in contractors %}
<option value="{{ contractor }}">{{ contractor }}</option>
{% endfor %}
</select>
{% endcache %}
或者您也可以使用 django 中的 low level caching API
:
from django.core.cache import cache
...
contractors = cache.get('contractors')
if not contractors:
contractors = list(Contractors.objects.values_list('name', flat='True'))
cache.set('contractors', contractors, 600)
我有一个小请求,数据从中传输到<select>
。我使用分页器,这个选择器每隔 page.So 发出一个请求我想缓存它并尝试每 10 分钟更新一次,因为 example.How 我是否保存缓存以及如何将它传递给模板所以选择器有效吗?
views.py
contractors = Contractors.objects.values_list('name', flat='True')
HTML-代码
<select name="contractorName" class="form-control" id="id_contractorName">
<option value="" selected=""></option>
{% for contractor in contractors %}
<option value="{{ contractor }}">{{ contractor }}</option>
{% endfor %}
</select>
您可以为此尝试使用 django-cachalot。它缓存服务的数据,并在数据更改时立即使缓存失效。
根据 django cache framework
,您可以通过多种方式做到这一点。
这是一个关于如何制作 template fragment
缓存的示例:
{% load cache %}
{% cache 600 contractors %}
<select name="contractorName" class="form-control" id="id_contractorName">
<option value="" selected=""></option>
{% for contractor in contractors %}
<option value="{{ contractor }}">{{ contractor }}</option>
{% endfor %}
</select>
{% endcache %}
或者您也可以使用 django 中的 low level caching API
:
from django.core.cache import cache
...
contractors = cache.get('contractors')
if not contractors:
contractors = list(Contractors.objects.values_list('name', flat='True'))
cache.set('contractors', contractors, 600)