2012-03-25 2 views
0

私はsite-wide Django cachingを有効にしましたが、私が使用しているサードパーティのアプリケーションはキャッシュコントロールの期待値を指定していません。だから私は彼らの意見がキャッシュに入れられるだろうと推測しています。添付ファイルにDjangoキャッシュコントロールを適用するには?

問題は、私が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' を交換します。

おそらく、上記のジェネリック版はDjangoコミュニティへのコミットに適しています= p

+0

Hmm。つまり、私はこれを無効にして、ビューごとに1つずつ使用する必要があります。 – AppleGrew

+0

@AppleGrewはちょうど解決策を提供しました – okm

+0

私はビューとテンプレートごとのキャッシュに行くと思います。これが他人を助けることを希望してあなたの答えを受け入れました。もう1つのことは、それぞれのURLの周りに意図したキャッシュ機能をラップすることができる関数を書くことが可能だろうと思っていたかもしれません。これはうまくいくかもしれませんが、まず 'include()'が返すものを正確に調べる必要があります。 – AppleGrew

関連する問題