Кэширование 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 кэша, потому что я аннулирую его, когда строки добавляются/удаляются или изменяются (что не будет происходить часто)

Вернуться на верх