如何在包含的URL上应用Django缓存控制?

时间:2012-03-25 15:08:53

标签: django pinax django-cache

我已启用site-wide Django caching,但我使用的第三方应用尚未指定任何缓存控制期望。所以,我猜他们的观点会被缓存。

问题在于我不希望Django缓存某些应用的视图。如何在include()上应用网址级缓存控制?

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

1 个答案:

答案 0 :(得分:0)

你做不到。每站点缓存是通过仅考虑请求和响应而不是特定视图的中间件来实现的。

但是,您可以通过提供修补的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
    """

用MIDDLEWARE_CLASSES中的上述路径替换'django.middleware.cache.FetchFromCacheMiddleware'。

也许上面的通用版本适合于向Django社区提交补丁= p