Статические файлы являются общим источником путаницы для новичков Django. Термин «статические файлы» относится к файлам, таким как CSS, JavaScript или изображения, которые не меняются в веб-приложении. Они остаются статичными. Для локального развития статические файлы подаются на локальном веб-сервере Django и требуется минимальная настройка. Django не поддерживает порцию статических файлов в производстве, поэтому для их работы требуется ряд дополнительных конфигураций.
В этом руководстве мы посмотрим, как работают статические файлы в Django, как их настроить локально, а также использовать Whitenoise служить им в производстве.
Местное развитие
Когда вы впервые запускаете startproject
Создать новый проект Django, A settings.py
Файл создается автоматически, какой по умолчанию настроен на локальные настройки разработки. К ним относятся Отладка
Установить на Правда
и Базы данных
установить на SQLite. Он также включает в себя, вблизи нижней части файла, одинокая линия для статических файлов:
# settings.py STATIC_URL = '/static/'
Static_url
Настройка элементов управления фактическим URL, используемым для определения местоположения статических файлов. В этом случае это было бы /статический/
, Так что в местном развитии 127.0.0.1:8000/static/
или localhost: 8000/статический/
Отказ В производстве, если наш сайт назывался example.com
Статические файлы будут находиться в example.com/static/
Отказ
Существует два шага, необходимые для использования статических файлов локально:
- Создать
статический
каталог - Добавить
{% Загрузить статические%}
В верхней части шаблона и используйтестатический
Метка шаблона
статический
каталог должен быть в той же папке, что и Manage.py
Отказ Добавьте любые желаемые статические файлы здесь. Например, вы можете создать другую папку под названием CSS
И в нем файл называется Base.csss
Отказ Чтобы включить этот файл в шаблоне, убедитесь, что первая строка файла – {% Загрузить статические%}
И ссылка будет выглядеть что-то подобное: Отказ
статический
Тег шаблона используется переменная, может также жесткокодировать результат здесь. Это полезно позже для производства.
Вот и все!
коллекционирование
Для производства Django просматривает весь проект для статических файлов ( StaticFiles_dirs
) и собирает все доступные статические файлы через коллекционирование
Команда в выделенный каталог ( Static_Root
). путь в котором хранятся файлы, продиктована StaticFiles_Storage
Отказ Поэтому мы должны добавлять эти три дополнительных конфигурации и запускать коллекционирование
Команда в производстве каждый раз, когда есть изменение статических файлов.
StaticFiles_Dirs
Рассказывает Джанго Где смотреть Для статических файлов в проекте Django. Часто это просто статический
каталог Но могут быть статические каталоги в различных приложениях или других местах. Когда коллекционирование
Команда работает, Django относится к списку каталогов здесь при создании выделенного каталога для обслуживания производства.
Static_root
это Расположение из собранных статических файлов, часто называемых StaticFiles
Отказ
StaticFiles_Storage
это Двигатель хранения файлов Используется при сборе статических файлов с CollecStatic
команда. По умолчанию он неявно установлен на django.contrib.staticfiles.Storage. StaticFilessTorage
Отказ
В вашем локальном проекте Django добавьте эти три настроек к вашему settings.py
файл.
# settings.py STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] # new STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # new STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage' # new
Затем запустите команду Python Manage.py Collectsatic
Отказ
(env) $ python manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings. This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel:
Тип Да
продолжать и ударить ключ ввода. Новый StaticFiles
каталог будет создан, в котором есть папки для Админ
(Встроенный администратор имеет свои статические файлы), StaticFiles.json
и какие бы каталоги в вашем статический
папка.
Если вы теперь добавите новый статический файл в статический
он будет доступен для местного использования. Только для производства, где файл не присутствует, если вы не запустите Python Manage.py Collectsatic
каждый раз. По этой причине работает коллекционирование
Как правило, добавляется к развертыванию трубопроводов и выполняется по умолчанию на Heroku.
Белый шум
Несмотря на то, что мы настроили наш проект Django, чтобы правильно собирать статические файлы, есть еще один шаг, который не включен в официальные документы Django. Это конфигурация Белый шум , радикально упрощенный статический файл, обслуживающий для веб-приложений Python. Можно ли использовать другой пакет для подачи статических файлов Python? да. Я когда-нибудь видел, что это сделано за последние 5 лет? Нет. Каждый использует белкуз, и вы тоже должны, поскольку Django не будет служить статическим файлам в производстве самостоятельно.
(env) $ pipenv install whitenoise==5.1.0
Тогда в settings.py
Файл, добавить Whitenoise
к Stall_apps
выше Встроенный StaticFiles
приложение. Под Промежуточное программное обеспечение
Добавьте новый Whitenoisemiddleware
на третьей строке. И внизу файла, измените StaticFiles_Storage
использовать белую. Это должно выглядеть следующее:
# settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'whitenoise.runserver_nostatic', # new 'django.contrib.staticfiles', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # new 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ... STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' # new
Вот и все! Беги Python Manage.py Collectsatic
Опять же, чтобы файлы хранятся с помощью белья. А затем развернитесь с уверенностью к платформе хостинга по вашему выбору.
Оригинал: “https://dev.to/learndjango/django-static-files-tutorial-1fg7”