Spec-Zone.ru › Django 2.0

Управление статическими файлами (например, изображениями, 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.0/howto/static-files/index/

Spec-Zone.ru

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