我有一个Django应用程序,它使用条件逻辑来确定在导航栏中显示什么。例如,如果用户没有身份验证->显示“登录”,否则->“显示用户名”。它在开发过程中运行良好,但在我的apache服务器上,它似乎总是执行“on”块,除非我在safari和chrome中执行shift+refresh。它似乎只在我的索引页面上,在应用程序中的其他页面上,if/ app按预期工作。
base.html
{% if user.is_authenticated %}
<a href="{% url 'login-signout' %}" id="account-link">
{% if user.username %}
{{user.username | capfirst }}
{% elif user.first_name %}
{{user.first_name | capfirst }}
{% else %}
Account
{% endif %}
</a>
{% else %}
<a href="{% url 'login-signup' %}" id="account-link">
Login
</a>
{% endif %}我试图得到一个新的项目副本,但我得到了同样的结果。知道为什么会发生这种事吗?
编辑来更新问题,所以在注释中建议的修复之后,我能够确定问题在于服务工作者正在查看一个旧缓存,而不是每次刷新时都得到一个新副本。
serviceworker.js
var staticCacheName = "django-pwa-v" + new Date().getTime();
// caches on install
self.oninstall = function (evt) {
evt.waitUntil(caches.open(staticCacheName).then(function (cache) {
return Promise.all(['/', 'main/home.html'].map(function (url) {
return fetch(new Request(url, { redirect: 'manual' })).then(function (res) {
return cache.put(url, res);
});
}));
}));
};
// Clear cache on activate
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames
.filter(cacheName => (cacheName.startsWith("django-pwa-")))
.filter(cacheName => (cacheName !== staticCacheName))
.map(cacheName => caches.delete(cacheName))
);
})
);
});
// serve from cache
self.onfetch = function (evt) {
var url = new URL(evt.request.url);
if (url.pathname != '/' && url.pathname != 'main/home.html') return;
evt.respondWith(caches.match(evt.request, { cacheName: staticCacheName }));
};为了完全避免这个问题,我在template / main /offline.html中构建了一个名为“脱机”的模板,我是否可以缓存该页面,并且只在脱机时显示它,而不是尝试缓存主应用程序页面?
发布于 2020-01-19 02:01:57
这不是django问题,而是浏览器问题。您的浏览器正在缓存页面以提高加载时间。浏览器选择缓存哪些页面取决于浏览器,但在您的情况下,它似乎是主页。此外,浏览器还会做出明智的决定来缓存页面的css、js和头,因为它可能不会改变。注意:-如果您使用的是像memcache或清漆这样的服务器端缓存,则必须在每次更新后使缓存失效。
更新
在找出它的缓存失效问题后,我可以建议您阅读官方W3附属网站上的文档,它有关于如何使缓存失效和如何提供脱机页面的所有答案。
https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Offline_Service_workers
https://stackoverflow.com/questions/59806160
复制相似问题