У меня есть приложение Django, которое использует условную логику c, чтобы определить, что отображать на панели навигации. Например, если пользователь не аутентифицирован -> показать «Логин», иначе -> «показать имя пользователя». Он отлично работает в разработке, но на моем apache сервере, кажется, всегда выполняется блок «else», если я не выполню shift + refre sh в safari и chrome. Кажется, он делает это только на моей странице индекса, на других страницах приложения if / else работает как положено.
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 %}
Я пытался просто получить бесплатную sh копию проекта, но я получаю те же результаты. Есть идеи, почему это может происходить?
Изменить, чтобы обновить вопрос Так что после предложенного исправления в комментариях я смог определить, что проблема в том, что работник службы смотрит на старый кеш, а не получает новую копию каждый refre sh.
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 }));
};
Чтобы вообще избежать этой проблемы, я создал шаблон под названием offline в шаблонах / main / offline. html, могу ли я просто кэшировать эту страницу и показывать только в автономном режиме, а не пытаться кэшировать главную страницу приложения?