Вставьте ваш кэшированный запрос в Кэш Django :
from django.core.cache import cache
cache.set('key', queryset)
Затем создайте процессор контекста, чтобы добавить значение кэша ко всем шаблонам:
# myproject/myapp/context_processors.py
from django.core.cache import cache
def cached_queries():
return {'cache', cache.get('key')}
Затем добавьте ваш контекстный процессор в ваш файл настроек Django :
TEMPLATE_CONTEXT_PROCESSORS += (
'myproject.myapp.context_processors.cached_queries'
)
Теперь вы сможете получить доступ к переменной cache
во всех шаблонах общего назначения и во всех шаблонах, к которым есть запросы.контекст, который задается шаблоном, если это делается в представлении:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Когда устанавливать кэш
Это зависит от того, что содержится в кэше.Однако распространенная проблема заключается в том, что Django действительно может запускать Python только при отправке запроса страницы, и часто это не то место, где вы хотите выполнять такую работу.
Альтернативой является создание настраиваемая команда управления для конкретного приложения.Затем вы можете либо запустить его вручную, когда это необходимо, либо чаще настроить его на выполнение cron .
. Чтобы создать команду управления, вы должны создать класс, происходящий из Command
внутрикаталога management/commands
, расположенного внутри приложения:
# myproject/myapp/management/commands/update_cache.py
from django.core.management.base import NoArgsCommand
from django.core.cache import cache
class Command(NoArgsCommand):
help = 'Refreshes my cache'
def handle_noargs(self, **options):
cache.set('key', queryset)
Имя этого файла важно, так как это будет имя команды.В этом случае теперь вы можете вызвать это в командной строке:
python manage.py update_cache