Приложение статического файлового менеджера ( staticfiles
) ¶
django.contrib.staticfiles
собирает статические файлы из каждого приложения (и из любых других указанных вами мест) в одно место, которое можно легко использовать в производственной среде.
Смотрите также
Для введения в приложение и некоторых примеров использования статических файлов см. Обработка статических файлов (например, изображений, JavaScript, CSS) . Инструкции по развертыванию статических файлов см. В разделе « Развертывание статических файлов» .
Настройки ¶
См. Настройки staticfiles для получения подробной информации о следующих настройках:
Команды администрирования ¶
django.contrib.staticfiles
предлагает три команды администрирования.
collectstatic
¶
-
django-admin collectstatic
¶
Собирает статические файлы в каталог STATIC_ROOT
.
Когда два файла имеют одинаковое имя, проблема решается по умолчанию аналогично тому, как работает разрешение шаблона: используется первый найденный файл. Если вы не уверены, команда findstatic
может показать вам, какие файлы были найдены.
Во время следующих запусков collectstatic
(если STATIC_ROOT
не пусто) файлы копируются только в том случае, если дата их изменения более поздняя, чем дата изменения файла в STATIC_ROOT
. Итак, если вы удаляете приложение из INSTALLED_APPS
, рекомендуется использовать опцию для удаления устаревших статических файлов.collectstatic --clear
Поиск файлов использует настройку STATICFILES_FINDERS
. По умолчанию Django просматривает все местоположения, определенные в STATICFILES_DIRS
каталоге 'static'
приложений, указанном в настройке INSTALLED_APPS
.
Команда администрирования collectstatic
вызывает метод post_process()
системы хранения STATICFILES_STORAGE
после каждого своего выполнения и передает ему список найденных путей. Метод также получает все параметры командной строки из collectstatic
. Это используется классом по ManifestStaticFilesStorage
умолчанию.
По умолчанию для собранных файлов даются разрешения параметра, FILE_UPLOAD_PERMISSIONS
а для каталогов - разрешения FILE_UPLOAD_DIRECTORY_PERMISSIONS
. Если вам нужны разные разрешения для этих файлов или каталогов, вы можете создать подкласс Static File Storage Classes и указать параметры file_permissions_mode
или directory_permissions_mode
. Например :
from django.contrib.staticfiles import storage
class MyStaticFilesStorage(storage.StaticFilesStorage):
def __init__(self, *args, **kwargs):
kwargs['file_permissions_mode'] = 0o640
kwargs['directory_permissions_mode'] = 0o760
super().__init__(*args, **kwargs)
Затем установите параметр STATICFILES_STORAGE
в 'chemin.vers.MyStaticFilesStorage'
.
Некоторые часто используемые варианты:
-
--noinput
,
--no-input
¶
НЕ задавайте пользователю никаких вопросов.
-
--ignore
PATTERN
,
-i
PATTERN
¶ Игнорируйте файлы, каталоги или пути, соответствующие этому шаблону стиля "glob". Может использоваться несколько раз, чтобы игнорировать несколько путей. Если вы указываете путь, всегда используйте обычные косые черты, даже в Windows.
-
--dry-run
,
-n
¶
Выполните команду как обычно, но не касаясь файловой системы.
-
--clear
,
-c
¶
Удаляет существующие файлы перед попыткой скопировать или связать исходный файл.
-
--link
,
-l
¶
Создайте символическую ссылку на каждый файл вместо копирования.
-
--no-post-process
¶
Не вызывает метод подсистемы
post_process()
хранения, настроенный вSTATICFILES_STORAGE
.
-
--no-default-ignore
¶
Не игнорируйте шаблоны стиля "glob" "" CVS " и обычно всегда игнорируются.
, ``'.*'
'*~'
Полный список параметров см. В справке для самих команд, выполнив:
$ python manage.py collectstatic --help
...\> py manage.py collectstatic --help
Настройка списка игнорируемых паттернов ¶
Список игнорируемых по умолчанию шаблонов ,, можно настроить более постоянно, чем предоставление параметра командной строки при каждом вызове . Добавьте настраиваемый класс , переопределите атрибут класса и замените параметр на путь к этому классу:['CVS', '.*', '*~']
--ignore
collectstatic
AppConfig
ignore_patterns
'django.contrib.staticfiles'
INSTALLED_APPS
from django.contrib.staticfiles.apps import StaticFilesConfig
class MyStaticFilesConfig(StaticFilesConfig):
ignore_patterns = [...] # your custom ignore list
findstatic
¶
-
django-admin findstatic staticfile [staticfile ...]
¶
Находит один или несколько относительных путей в соответствии с активированными поисковиками.
Например :
$ python manage.py findstatic css/base.css admin/js/core.js
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
Found 'admin/js/core.js' here:
/home/polls.com/src/django/contrib/admin/media/js/core.js
...\> py manage.py findstatic css\base.css admin\js\core.js
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
Found 'admin/js/core.js' here:
/home/polls.com/src/django/contrib/admin/media/js/core.js
-
findstatic
--first
¶
По умолчанию используются все найденные местоположения. Чтобы вернуть только первый найденный относительный путь, используйте опцию --first
:
$ python manage.py findstatic css/base.css --first
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
...\> py manage.py findstatic css\base.css --first
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
Это инструмент отладки; вы увидите, какой именно статический файл будет найден по заданному пути.
Установив флаг --verbosity
в 0, вы можете подавить дополнительные объяснения и получить только имена путей:
$ python manage.py findstatic css/base.css --verbosity 0
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
...\> py manage.py findstatic css\base.css --verbosity 0
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
С другой стороны, установив для параметра --verbosity
значение 2, вы можете получить список всех каталогов, в которых производился поиск:
$ python manage.py findstatic css/base.css --verbosity 2
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
Looking in the following locations:
/home/special.polls.com/core/static
/home/polls.com/core/static
/some/other/path/static
...\> py manage.py findstatic css\base.css --verbosity 2
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
Looking in the following locations:
/home/special.polls.com/core/static
/home/polls.com/core/static
/some/other/path/static
runserver
¶
-
django-admin runserver [addrport]
Заменяет базовую команду, runserver
если приложение staticfiles
есть installée
, и автоматически добавляет статическую файловую службу. Файловая служба не использует эту настройку MIDDLEWARE
.
Команда добавляет эти параметры:
-
--nostatic
¶
Используйте параметр, --nostatic
чтобы полностью отключить службу статических файлов с помощью приложения staticfiles . Этот параметр доступен только в том случае, если приложение staticfiles является частью настройки INSTALLED_APPS
вашего проекта.
Пример использования:
$ django-admin runserver --nostatic
...\> django-admin runserver --nostatic
-
--insecure
¶
Используйте опцию , --insecure
чтобы заставить статический файловый сервис с staticfiles приложением , даже если установка DEBUG
находится False
. Используя этот вариант, вы признаете тот факт, что он совершенно неэффективен и, скорее всего, небезопасен . Этот вариант предназначен только для локальной разработки и никогда не должен использоваться в производственной среде . Это доступно только в том случае, если приложение staticfiles находится в настройках INSTALLED_APPS
вашего проекта.
--insecure
не работает с ManifestStaticFilesStorage
.
Пример использования:
$ django-admin runserver --insecure
...\> django-admin runserver --insecure
Хранилища ¶
StaticFilesStorage
¶
-
класс
storage.
StaticFilesStorage
¶
Подкласс механизма хранения, FileSystemStorage
который использует настройку STATIC_ROOT
в качестве базового местоположения в файловой системе и настройку STATIC_URL
в качестве базового URL-адреса.
-
storage.StaticFilesStorage.
post_process
( пути , ** варианты ) ¶
Если этот метод определен для хранилища, он вызывается командой manage collectstatic
после каждого выполнения и получает локальные хранилища и пути к найденным файлам в форме словаря, а также параметры в командной строке. Она возвращает кортеж из трех значений: . Значения пути являются строками и являются логическим значением, указывающим, получило ли значение постобработку, или исключение, если постобработка не удалась.chemin_original, chemin_traité, traité
traité
Хранилище ManifestStaticFilesStorage
использует этот класс незаметно для замены путей их «хешированными» эквивалентами и соответствующего обновления кеша.
ManifestStaticFilesStorage
¶
-
класс
storage.
ManifestStaticFilesStorage
¶
Подкласс механизма хранения, StaticFilesStorage
который изменяет имена обрабатываемых файлов, добавляя к имени файла хеш MD5 содержимого файла. Например, файл css/styles.css
также будет сохранен как css/styles.55e7cbb9ba48.css
.
Целью этого хранилища является продолжение обслуживания старых файлов в случае, если некоторые страницы все еще ссылаются на эти файлы, например, потому что они кэшированы вами или внешним прокси-сервером. Кроме того, это очень полезно, если вы хотите применить очень длинные заголовки даты истечения срока действия к развернутым файлам, чтобы ускорить время загрузки страницы при последующих посещениях.
Механизм хранения автоматически заменяет в сохраненных файлах пути, соответствующие другим сохраненным файлам, на пути к кэшированным копиям (с помощью метода post_process()
). Регулярные выражения , используемые , чтобы найти эти пути ( django.contrib.staticfiles.storage.HashedFilesMixin.patterns
) покрытие по умолчанию @import правила и выписки URL () из CSS стилей . Например, файл 'css/styles.css'
с содержимым
@import url("../admin/css/base.css");
будет заменен вызовом метода url()
механизма хранения ManifestStaticFilesStorage
, что в конечном итоге приведет к сохранению файла 'css/styles.55e7cbb9ba48.css'
со следующим содержимым:
@import url("../admin/css/base.27e20196a850.css");
-
storage.ManifestStaticFilesStorage.
max_post_process_passes
¶
Поскольку статические файлы могут относиться к другим статическим файлам, которым требуется замена пути, может потребоваться несколько проходов замены пути, пока хэши файлов не сойдутся. Чтобы избежать бесконечного цикла из-за не сходящихся хэшей (например, если 'foo.css'
относится к тому 'bar.css'
, на кого имеется ссылка 'foo.css'
), максимальное количество проходов устанавливается до того, как постпроцесс будет отброшен. В случае большого количества ссылок может потребоваться увеличить это количество проходов. Это можно сделать, создав подкласс ManifestStaticFilesStorage
и установив атрибут max_post_process_passes
. Его значение по умолчанию - 5.
Чтобы включить хранилище ManifestStaticFilesStorage
, необходимо убедиться, что выполняются следующие условия:
- настройка
STATICFILES_STORAGE
содержит'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
- настройка
DEBUG
содержитFalse
- вы собрали все статические файлы с помощью команды администратора
collectstatic
Поскольку создание хэша MD5 может снизить производительность вашего веб-сайта, staticfiles
автоматически сохраняется совпадение имени хэша для каждого обработанного файла в названном файле staticfiles.json
. Это происходит только один раз, когда вы запускаете команду collectstatic
.
-
storage.ManifestStaticFilesStorage.
manifest_strict
¶
Если файл не найден в манифесте staticfiles.json
во время выполнения, создается исключение ValueError
. Это поведение можно отключить, создав подкласс ManifestStaticFilesStorage
и установив для атрибута manifest_strict
значение False
- несуществующие пути останутся без изменений.
Поскольку команда должна collectstatic
быть выдана, это хранилище обычно не должно использоваться при запуске тестов, поскольку оно collectstatic
не выполняется в обычной тестовой конфигурации. При тестировании убедитесь, что для параметра STATICFILES_STORAGE
установлено другое значение, например значение по умолчанию 'django.contrib.staticfiles.storage.StaticFilesStorage'
.
-
storage.ManifestStaticFilesStorage.
file_hash
( name , content = None ) ¶
Метод, используемый при создании хешированного имени файла. Должен возвращать отпечаток хэша для данного имени файла и его содержимого. По умолчанию мы вычисляем хеш MD5 из содержимого, как указано выше. Не стесняйтесь переопределить этот метод, чтобы использовать свой собственный алгоритм хеширования.
ManifestFilesMixin
¶
-
класс
storage.
ManifestFilesMixin
¶
Используйте этот класс миксина с настраиваемым хранилищем, чтобы добавить хэш MD5 содержимого файла к имени файла, как это делается ManifestStaticFilesStorage
.
Модуль finders
¶
Модуль finders
(обнаружение статических файлов) staticfiles
имеет атрибут, searched_locations
который представляет собой список путей к каталогам, в которых выполнялся поиск статических файлов. Пример использования:
from django.contrib.staticfiles import finders
result = finders.find('css/base.css')
searched_locations = finders.searched_locations
Другие утилиты ¶
Помимо приложения, есть еще несколько утилит staticfiles
для управления статическими файлами:
- Контекстный процессор,
django.template.context_processors.static()
который добавляетSTATIC_URL
к контексту каждый шаблон, отображаемый с помощьюRequestContext
. - Тег
static
базового шаблона, который берет путь и объединяет его со статическим префиксомSTATIC_URL
. Еслиdjango.contrib.staticfiles
установлено, то тег вместо этого использует методurl()
изSTATICFILES_STORAGE
. - Тег шаблона,
get_static_prefix
который заполняет переменную шаблона статическим префиксомSTATIC_URL
для немедленного использования или сохранения в переменной. - Аналогичный тег шаблона,
get_media_prefix
который работает аналогично,get_static_prefix
но используетMEDIA_URL
.
Vue для использования статических файлов в разработке ¶
Инструменты для создания статических файлов в первую очередь предназначены для правильного развертывания статических файлов в рабочей среде. Обычно это предполагает выделение отдельного сервера для статических файлов, что вызывает слишком много дополнительных действий при локальной разработке в среде разработки. Таким образом, приложение staticfiles
поставляется с быстрым обзором , который можно использовать для обслуживания файлов во время локальной разработки.
-
views.
serve
( запрос , путь ) ¶
Эта функция просмотра обслуживает статические файлы во время разработки.
Предупреждение
Этот вид работает только в случае , если установка DEBUG
находится True
.
Это потому, что это представление совершенно неэффективно и, вероятно, небезопасно . Он предназначен только для локальной разработки и никогда не должен использоваться в производстве .
Заметка
Чтобы угадать типы содержимого обслуживаемых файлов, это представление использует mimetypes
стандартный модуль библиотеки Python, который сам полагается на сопоставление типов файлов базовой платформы. Если вы обнаружите, что это представление не возвращает правильные типы содержимого для определенных файлов, более чем вероятно, что сопоставление типов файлов платформы необходимо обновить. Это может быть достигнуто, например, путем установки или обновления пакета mailcap
в дистрибутиве Red Hat или пакета mime-support
в дистрибутиве Debian.
Этот вид автоматически активируется с помощью runserver
(с настройкой DEBUG
на True
). Чтобы использовать представление с другим локальным сервером разработки, добавьте следующий код в конец основной конфигурации URL:
from django.conf import settings
from django.contrib.staticfiles import views
from django.urls import re_path
if settings.DEBUG:
urlpatterns += [
re_path(r'^static/(?P<path>.*)$', views.serve),
]
Примечание. Начало шаблона ( r'^static/'
) должно соответствовать настройке STATIC_URL
.
Поскольку это немного утомительно, есть служебная функция, которая сделает это за вас:
-
urls.
staticfiles_urlpatterns
() ¶
Это возвращает правильный шаблон URL-адреса для обслуживания статических файлов и может быть добавлен в список уже определенных шаблонов URL-адресов. Используйте это так:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf here ...
urlpatterns += staticfiles_urlpatterns()
Эта функция проверяет настройку STATIC_URL
и соответствующим образом подключает представление статической файловой службы. Не забудьте установить STATICFILES_DIRS
соответствующий параметр, чтобы знать, django.contrib.staticfiles
где искать файлы, помимо файлов в каталогах приложений.
Предупреждение
Эта утилита функция работает только тогда , когда DEBUG
равны True
и установка не STATIC_URL
является ни пустым , ни полный URL , как http://static.example.com/
.
Это потому, что это представление совершенно неэффективно и, вероятно, небезопасно . Он предназначен только для локальной разработки и никогда не должен использоваться в производстве .
Специальный тестовый пример для «живого тестирования» ¶
-
класс
testing.
StaticLiveServerTestCase
¶
Этот подкласс модульного теста TestCase
наследуется от django.test.LiveServerTestCase
.
Как и его родительский класс, вы можете использовать его для написания тестов, которые включают работу тестируемого кода и его использование инструментами тестирования через HTTP (например, Selenium, PhantomJS и т. Д.), И для которых он Необходимо, чтобы статические файлы также были доступны.
Но поскольку он использует представление, django.contrib.staticfiles.views.serve()
представленное выше, оно может прозрачно обслуживать статические ресурсы, предоставляемые механизмом обнаружения при запуске тестов staticfiles
. Это означает, что вам не нужно запускать collectstatic
перед тестовой настройкой или как ее часть.