Как применить контроль кэша Django к включенным URL?
Я включил кеширование Django для всего сайта, но сторонние приложения, которые я использую, не указали никаких ожиданий по управлению кешем. Итак, я предполагаю, что их взгляды будут кэшированы.
Проблема в том, что я не хочу, чтобы Django кэшировал представления некоторых приложений. Как применить контроль кеша на уровне URL к include()
?
url(r"^account/", include("pinax.apps.account.urls")) #How to apply cache control here?
1 ответ
Ты не можешь Кеш на сайт достигается через промежуточное ПО, которое рассматривает только запрос и ответ, а не конкретное представление.
Однако этого можно достичь, предоставив исправленную версию django.middleware.cache.FetchFromCacheMiddleware.
class ManagedFetchFromCacheMiddle(FetchFromCacheMiddleware):
def process_request(self, request):
if should_exempt(request):
request._cache_update_cache = False
return
return super(ManagedFetchFromCacheMiddle, self).process_request(request)
def should_exempt(request):
"""Any predicator to exempt cache on a request
For your case, it looks like
if request.path.startswith('/account/'):
return True
"""
Замените 'django.middleware.cache.FetchFromCacheMiddleware' на путь, указанный выше, в MIDDLEWARE_CLASSES.
Может быть, общая версия выше подходит для отправки патча в сообщество Django =p