В новых версиях Django очень простое решение - изменить URL проекта следующим образом:
from django.conf.urls.static import static
from django.contrib.staticfiles.views import serve
from django.views.decorators.cache import cache_control
# YOUR urlpatterns here...
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, view=cache_control(no_cache=True, must_revalidate=True)(serve))
Я пришел к этому, посмотрев, как staticfiles автоматически изменяет URL-адреса, и просто добавив декоратор вида. Я действительно не понимаю, почему это не по умолчанию, а только для разработки. Представление может правильно обрабатывать HTTP-заголовок «If-Modified-Since», поэтому запрос всегда выполняется, но содержимое передается только при изменениях (судя по просмотру метки времени изменения в файле).
Чтобы это работало, вы должны добавить --nostatic
при использовании runserver
, в противном случае вышеуказанные изменения просто игнорируются.
ВАЖНОЕ РЕДАКТИРОВАНИЕ: То, что у меня было раньше, не работало, потому что я не использовал --nostatic
, а декоратор never_cache
также включал no-store
, что означало, что неизмененные файлы всегда были перенесены повторно вместо возврата 304 Not Modified