From 34d351b2f581af756e86e8ac270e706b39cfd747 Mon Sep 17 00:00:00 2001 From: Mandel Olaiya Date: Tue, 12 May 2026 00:05:53 +0200 Subject: [PATCH] Disable caching for first-visit unlocalized homepage --- mandelstudio/middleware_language_redirect.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/mandelstudio/middleware_language_redirect.py b/mandelstudio/middleware_language_redirect.py index ee78d0b..d240260 100644 --- a/mandelstudio/middleware_language_redirect.py +++ b/mandelstudio/middleware_language_redirect.py @@ -2,6 +2,7 @@ from __future__ import annotations from django.conf import settings from django.http import HttpRequest, HttpResponseRedirect +from django.utils.cache import add_never_cache_headers, patch_vary_headers from django.utils.translation import ( get_language_from_request, get_supported_language_variant, @@ -36,7 +37,11 @@ class FirstVisitLanguageRedirectMiddleware: redirect_url = self._build_redirect_url(request) if redirect_url: return HttpResponseRedirect(redirect_url) - return self.get_response(request) + response = self.get_response(request) + if self._should_disable_home_cache(request): + patch_vary_headers(response, ("Accept-Language", "Cookie")) + add_never_cache_headers(response) + return response def _build_redirect_url(self, request: HttpRequest) -> str | None: if request.method != "GET": @@ -100,3 +105,13 @@ class FirstVisitLanguageRedirectMiddleware: if normalized in self.supported_languages: return normalized return None + + def _should_disable_home_cache(self, request: HttpRequest) -> bool: + if request.method != "GET": + return False + if self.language_cookie_name in request.COOKIES: + return False + path = request.path_info or "/" + if path != "/": + return False + return not self._is_localized_path(path)