Django缓存 - 没有为页面的某些部分缓存

问题描述:

我有使用Safari的django缓存登录区域的问题。Django缓存 - 没有为页面的某些部分缓存

当我使用memcache并启用'django.middleware.cache.FetchFromCacheMiddleware'时,页面的登录部分总是被缓存,即使在按下注销后也显示“欢迎用户名”。

单击注销后应该变回“登录/注册”链接。这似乎只发生在safari中。有没有办法不缓存HTML页面的一部分?我在查看函数时使用了@never_cache,但是这个登录信息是base.html的一部分,它在其他站点模板htmls中得到扩展。

谢谢。

代码

在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 2012-01-16 18:42:43

+0

同意@AdamKG。首先要做的是重新检查包含登录信息的基本模板 - 是否在那里缓存?然后确认视图*的其余部分不会被缓存,比如只需添加显示请求当前日期和时间的“{%now”r“%}'即可。您可能还想将其添加到基本模板的登录部分! – 2012-01-16 18:53:34

+0

Adam,我将“视图依赖HTML”改为“查看功能”。我正是这个意思。 – DavidL 2012-01-16 19:01:56

这很可能是由于到Safari浏览器被指示缓存的页面进行了一定的时间的报头的问题。