Как применить контроль кэша Django к включенным URL? - PullRequest
0 голосов
/ 25 марта 2012

Я включил кэширование Django для всего сайта , но сторонние приложения, которые я использую, не указали никаких ожиданий контроля кэша.Итак, я предполагаю, что их представления будут кэшироваться.

Проблема в том, что я не хочу, чтобы Django кэшировал представления некоторых приложений.Как применить управление кэшем на уровне URL для include()?

url(r"^account/", include("pinax.apps.account.urls")) #How to apply cache control here?

1 Ответ

0 голосов
/ 25 марта 2012

Вы не можете. Кеш на сайт достигается через промежуточное программное обеспечение, которое рассматривает только запрос и ответ, а не конкретное представление.

Однако этого можно достичь, предоставив исправленную версию 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

...