Spec-Zone.ru › Django 2.2

Управление статическими файлами (например, изображениями, JavaScript, CSS)

Веб-сайтам обычно требуется обслуживать дополнительные файлы, такие как изображения, JavaScript или CSS. В Django эти файлы называются «статическими файлами». Django предоставляет django.contrib.staticfiles для управления ими.

Эта страница описывает, как обслуживать эти статические файлы.

Настройка статических файлов

  1. Убедитесь, что django.contrib.staticfiles включен в ваш INSTALLED_APPS.
  2. В файле настроек определите STATIC_URL, например:

    STATIC_URL = '/static/'
    
  3. В шаблонах используйте static тег шаблона для построения URL для заданного относительного пути с использованием настроек STATICFILES_STORAGE.

    {% load static %}
    <img src="{% static "my_app/example.jpg" %}" alt="My image">
    
  4. Сохраните статические файлы в папке, названной static в вашем приложении. Например, my_app/static/my_app/example.jpg.

Обслуживание файлов

В дополнение к этим шагам по настройке, вам также необходимо фактически обслуживать статические файлы.

Во время разработки, если вы используете django.contrib.staticfiles, это будет сделано автоматически runserver при DEBUG установлен на True (см. django.contrib.staticfiles.views.serve()).

Этот метод является крайне неэффективным и, вероятно, небезопасным, поэтому он не подходит для производства.

См. Развёртывание статических файлов для правильных стратегий обслуживания статических файлов в производственных средах.

Ваш проект, вероятно, также будет содержать статические ресурсы, которые не привязаны к конкретному приложению. Помимо использования директории static/ внутри приложений, вы можете определить список директорий (STATICFILES_DIRS) в файле настроек, где Django также будет искать статические файлы. Например:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

См. документацию по настройке STATICFILES_FINDERS для получения подробной информации о том, как staticfiles находит ваши файлы.

Назначение имён статическим файлам

Сейчас мы можем обойтись без размещения статических файлов непосредственно в my_app/static/ (а не создания дополнительной my_app поддиректории), но это будет плохой идеей. Django будет использовать первый статический файл, имя которого соответствует, и если у вас есть статический файл с таким же именем в другом приложении, Django не сможет отличить их. Нам нужно указать Django на правильный, и самый простой способ сделать это – назначить имена, поместив эти статические файлы в другую директорию, названную самим приложением.

Обслуживание статических файлов во время разработки

Если вы используете django.contrib.staticfiles, как описано выше, runserver сделает это автоматически, когда DEBUG установлено на True. Если у вас нет django.contrib.staticfiles в INSTALLED_APPS, вы по-прежнему можете вручную обслуживать статические файлы, используя представление django.views.static.serve().

Это не подходит для использования в производстве! Для некоторых распространенных стратегий развертывания см. Развертывание статических файлов.

Например, если ваша STATIC_URL определена как /static/, вы можете сделать это, добавив следующий фрагмент в ваш файл urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Примечание

Эта вспомогательная функция работает только в режиме отладки и только если заданный префикс является локальным (например, /static/) и не является URL-адресом (например, http://static.example.com/).

Кроме того, эта вспомогательная функция обслуживает только фактическую папку STATIC_ROOT; она не выполняет поиск статических файлов, как django.contrib.staticfiles.

Обслуживание файлов, загруженных пользователем, во время разработки

Во время разработки вы можете обслуживать загруженные пользователем медиафайлы из MEDIA_ROOT с помощью представления django.views.static.serve().

Это не подходит для использования в производстве! Для некоторых распространенных стратегий развертывания см. Развертывание статических файлов.

Например, если ваша MEDIA_URL определена как /media/, вы можете сделать это, добавив следующий фрагмент в ваш файл urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Примечание

Эта вспомогательная функция работает только в режиме отладки и только если заданный префикс является локальным (например, /media/) и не является URL-адресом (например, http://media.example.com/).

Тестирование

При запуске тестов, использующих реальные HTTP-запросы вместо встроенного тестового клиента (т. е. при использовании встроенного LiveServerTestCase) статические ресурсы необходимо обслуживать вместе с остальным контентом, чтобы тестовая среда воспроизводила реальную как можно более точно, но LiveServerTestCase имеет только очень базовую функциональность обслуживания статических файлов: она не знает о функции поиска приложения staticfiles и предполагает, что статический контент уже собран в STATIC_ROOT.

Из-за этого, staticfiles поставляет собственный django.contrib.staticfiles.testing.StaticLiveServerTestCase, подкласс встроенного, который имеет возможность прозрачно обслуживать все ресурсы во время выполнения этих тестов, очень похожим образом к тому, что мы получаем во время разработки с помощью DEBUG = True, т. е. без необходимости собирать их с помощью collectstatic предварительно.

Развёртывание

django.contrib.staticfiles предоставляет удобную команду управления для сбора статических файлов в одну директорию, чтобы вы могли легко их обслуживать.

  1. Установите настройку STATIC_ROOT на директорию, из которой вы хотите обслуживать эти файлы, например:

    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. Запустите команду управления collectstatic:

    $ python manage.py collectstatic
    

    Это скопирует все файлы из ваших статических папок в директорию STATIC_ROOT.

  3. Используйте веб-сервер по своему выбору для обслуживания файлов. Развёртывание статических файлов описывает некоторые распространённые стратегии развертывания статических файлов.

Подробнее

Этот документ охватывает основы и некоторые распространённые шаблоны использования. Для получения полной информации обо всех настройках, командах, тегах шаблонов и других компонентах, включённых в django.contrib.staticfiles, см. справочник по статическим файлам.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/howto/static-files/index/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API