Кэширование TemplateView
Я хочу использовать кэш из django для кэширования одного шаблона, который делает дорогие запросы.
Я не уверен, могу ли я просто использовать render() в обработчике get, как в фрагменте ниже:
class MyTemplateView(TemplateView):
template_name = "my-template.html"
def get(self, request, *args, **kwargs):
cached = cache.get("my-view-response")
if cached:
return cached
response = super().get(request, *args, **kwargs).render() # <---
cache.set("my-view-response", response)
return response
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
... # expensive queries
return context
Обычно TemplateView.get возвращает экземпляр TemplateResponse, поэтому, вызывая render, я как будто пропускаю некоторые шаги.
Поэтому мой вопрос: нормально ли возвращать строку из TemplateView.get?
inb4: Веб-страница загружается правильно; я не могу кэшировать сам экземпляр TemplateResponse, потому что он выбрасывает исключение; я должен использовать "низкоуровневый" API кэша, потому что я аннулирую его, когда строки добавляются/удаляются или изменяются (что не будет происходить часто)