2012-03-25 5 views
0

site-wide Django caching을 사용 설정했지만 사용중인 타사 앱이 캐시 제어 예상을 지정하지 않았습니다. 그래서, 나는 그들의 견해가 캐쉬 될 것으로 짐작하고 있습니다.포함 된 URL에 Django 캐시 컨트롤을 적용하는 방법은 무엇입니까?

문제는 장고가 일부 앱의보기를 캐시하지 않기를 바라는 것입니다. include()에서 URL 수준 캐시 제어를 적용하려면 어떻게해야합니까?

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

답변

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'를 대체.

위의 일반 버전이 장고 커뮤니티에 대한 커밋에 적합 할 수 있습니다. = p

+0

흠. 그래서 나는 이것을 비활성화하고 per-view를 사용해야한다는 것을 의미합니다. – AppleGrew

+0

@AppleGrew는 방금 솔루션을 제공했습니다. – okm

+0

저는보기와 템플릿마다 캐시를 ​​사용합니다. 내 사이트의 대부분은 동적이기 때문에 템플릿 캐시를 사용합니다. 이것이 다른 사람들을 도울 희망에서 당신의 대답을 받아 들였습니다. 한 가지 더 궁금한 것은 어쩌면 각 포함 된 URL 주위에 의도 한 캐시 기능을 래핑 할 수있는 함수를 작성하는 것이 가능하다는 것입니다. 이것은 작동하지만,'include()'가 정확히 무엇을 반환하는지 먼저 확인해야합니다. – AppleGrew

관련 문제