Рубрики
Без рубрики

Учебник по статическим файлам Django

Статические файлы являются общим источником путаницы для новичков Django. Термин «статические файлы» относится к … Теги с Джанго, Питоном, Учебником, начинающими.

Статические файлы являются общим источником путаницы для новичков 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”