Я нашел этот рецепт, как обновить файлы css и js, однако он все еще не работает для меня.Но я думаю, что мне не хватает git или BASE_DIR, потому что он показывает время последнего коммита, а не время последнего локального изменения ...
Если вы не хотите обновлять кэш браузера каждый разВы изменяете свои файлы CSS и JavaScript, или при стилизации изображений вам нужно динамически устанавливать STATIC_URL с изменяющимся компонентом пути.При динамически изменяющемся URL-адресе каждый раз, когда код обновляется, браузер посетителя будет принудительно загружать все новые некэшированные статические файлы.В этом рецепте мы зададим динамический путь для STATIC_URL, когда вы используете систему контроля версий Git.
Подготовка Убедитесь, что ваш проект находится под контролем версии Git, и у вас есть BASE_DIR, определенный в вашемнастройки
Как это сделать ... Процедура установки метки времени Git в настройке STATIC_URL состоит из следующих двух шагов:
1. Добавьте следующее содержимое к misc.py
файл помещен в utils/
: utils/misc.py
import subprocess
from datetime import datetime
def get_git_changeset(absolute_path):
repo_dir = absolute_path
git_show = subprocess.Popen(
'git show --pretty=format:%ct --quiet HEAD',
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
shell=True, cwd=repo_dir, universal_newlines=True,
)
timestamp = git_show.communicate()[0].partition('\n')[0]
try:
timestamp = \
datetime.utcfromtimestamp(int(timestamp))
except ValueError:
return ""
changeset = timestamp.strftime('%Y%m%d%H%M%S')
return changeset
Затем импортируйте вновь созданную функцию get_git_changeset () в настройках и используйте ее для пути STATIC_URL следующим образом: settings.py
from utils.misc import get_git_changeset
STATIC_URL = "/static/%s/" % get_git_changeset(BASE_DIR)
Как это работает…
Функция get_git_changeset()
принимает каталог absolute_path в качестве параметра и вызывает команду оболочки git show с параметрами, чтобы показать метку времени Unix ревизии HEAD в каталоге.Как указано в предыдущем рецепте, мы передаем функцию BASE_DIR, поскольку мы уверены, что она находится под контролем версий.Временная метка анализируется;преобразуется в строку, состоящую из года, месяца, дня, часа, минут и секунд;вернулся;и включен в определение STATIC_URL.
(c) Аидас Бендорайтис - Веб-разработка с кулинарной книгой Django, 2-е издание, стр. 21. - 2016.
ОБНОВЛЕНИЕ
И, наконец, я нашел рабочий код после этого вопроса.
import os
def get_file_changeset(absolute_path):
timestamp = max(map(lambda x: os.path.getmtime(x[0]), os.walk(os.path.join(absolute_path, 'static_polo'))))
try:
timestamp = datetime.utcfromtimestamp(int(timestamp))
except ValueError:
return ""
changeset = timestamp.strftime('%Y%m%d%H%M%S')
return changeset
Добавьте это к вам STATIC_URL
, как описано выше, и перезагружайте сервер разработчика каждый раз, когда выотредактируйте ваши статические файлы.