【发布时间】:2012-02-11 15:08:15
【问题描述】:
我在使用 Safari 登录区域时遇到 django 缓存问题。
当我使用 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 %}
【问题讨论】:
-
@never_cache 用于视图函数,我不明白“视图依赖的 HTML”是什么意思。 Django 有模板片段缓存,但这听起来像是您的 HTTP 缓存指令的问题。 HTTP 级缓存发生在每个请求的粒度上 - 没有办法说“不缓存此请求的 部分”,只有“缓存此请求”或“不缓存此请求” .
-
同意@AdamKG。首先要做的是重新检查包含登录信息的基本模板——它是否缓存在那里?然后确认视图的其余部分没有 被缓存,比如添加
{% now "r" %},它将显示请求的当前日期和时间。您可能还想将其添加到基本模板的登录部分! -
亚当,我将“查看依赖的 HTML”更改为“查看函数”。我就是这个意思。
-
乔丹,尝试了 {% now "r" %} 并且似乎 safari 没有刷新页面,所以它导致了这个错误。其他浏览器(例如 Chrome 和 FF)会刷新并更改当前时间。