2012-01-16 14 views
2

Safariを使用してログイン領域のキャッシュにdjangoの問題があります。Django Caching - ページの特定の部分にキャッシュしない

私はmemcacheを使用し、 'django.middleware.cache.FetchFromCacheMiddleware'をオンにすると、ログアウトを押した後でも、ページのログイン部分が常にキャッシュされ、「ようこそのユーザー名」が表示されます。

ログアウトをクリックすると「ログイン/サインアップ」リンクに戻ります。これはサファリでのみ起こるようです。 HTMLページの一部をキャッシュしない方法はありますか?私はビュー関数については@never_cacheを使用しましたが、このログイン情報はbase.htmlの一部で、他のサイトテンプレートのHTMLを通して拡張されています。

ありがとうございます。

コード

base.htmlで

{% if user.is_authenticated %} 
     <div class="login"> 
     <a id="login_dropdown_link" title="Login_nav">Welcome {{ user.username }} (<span id="total_count"> {% total_count %}</span>)</a> 
     </div> 
{% else %} 
     <div class="login"> 
     <span class="spaced"><a href="/accounts/login" id="login-link" class="red">Log In | Sign Up</a></span> 
     </div> 
{% endif %} 
+0

@never_cacheがビュー関数で使用されていますが、「ビュー依存のHTML」の意味を理解できません。 Djangoにはテンプレートのフラグメントキャッシュがありますが、これはHTTPキャッシュディレクティブの問題のようです。 HTTPレベルのキャッシュは、要求ごとに細かく行われます。「この要求の一部をキャッシュしない」、「この要求をキャッシュする」、「この要求をキャッシュしない」という意味はありません。 – AdamKG

+0

@AdamKGに同意します。最初に行うことは、ログイン情報を含む基本テンプレートを再確認することです。そこにキャッシュされますか?その後、残りのビュー*がキャッシュされていないことを確認してください。リクエストの現在の日時を示す '{%now" r "%}"を追加するだけです。これをベーステンプレートのログインセクションに追加することもできます。 –

+0

Adam、 "ビュー依存HTML"を "ビュー関数"に変更しました。それが私の言いたいことです。 – DavidL

答えて

0

これは、Safariが一定時間ページをキャッシュするように指示されているヘッダの問題に最も可能性が高いです。

関連する問題