Какой смысл в Джанго?

Это, наверное, глупый вопрос, но он просто не щелкает мне в голову.

В Django принято помещать все ваши статические файлы (например, css, js), специфичные для вашего приложения, в папку с именем static. Таким образом, структура будет выглядеть так:

mysite/
    manage.py
    mysite/ --> (settings.py, etc)
    myapp/ --> (models.py, views.py, etc)
        static/

В mysite/settings.py у меня есть:

STATIC_ROOT = 'staticfiles'

Поэтому, когда я запускаю команду:

python manage.py collectstatic   

Он создает папку с именем staticfiles на корневом уровне (так же, как myapp/)

какой в ​​этом смысл? Разве это не просто создание копии всех моих статических файлов?

4 ответа

Решение

Сбор статических файлов из нескольких приложений в один путь

Ну, один проект Django может использовать несколько приложений, так что пока у вас есть только одно myappэто может быть myapp1, myapp2, так далее

Скопировав их из отдельных приложений в одну папку, вы можете указать свой веб-сервер внешнего интерфейса (например, nginx) на эту единственную папку. STATIC_ROOT и обслуживать статические файлы из одного места, а не настраивать веб-сервер для обслуживания статических файлов по нескольким путям.

Постоянные URL с ManifestStaticFilesStorage

Примечание о том, что хеш MD5 добавляется к имени файла для управления версиями: это не является частью поведения по умолчанию collectstatic, как settings.STATICFILES_STORAGE по умолчанию StaticFilesStorage (который этого не делает)

MD5-хеш сработает, например, если вы установите его для использования ManifestStaticFilesStorage, который рекламирует такое поведение.

Цель этого хранилища - продолжать обслуживать старые файлы в случае, если некоторые страницы все еще ссылаются на эти файлы, например, потому что они кэшированы вами или сторонним прокси-сервером. Кроме того, очень полезно, если вы хотите применить к развернутым файлам заголовки Expires в далеком будущем, чтобы ускорить время загрузки для последующих посещений страницы.

Статические файлы Django могут быть во многих местах. Файл, который служит /static/img/icon.png может прийти из многих мест. По умолчанию:

  • FileSystemFinder буду искать img/icon.png в каждом из STATICFILES_DIRS,
  • AppDirectoriesFinder буду искать img/icon.png в static подпапка в каждом из ваших INSTALLED_APPS, Это позволяет библиотекам, таким как Django Admin, добавлять свои статические файлы в ваше приложение.

Сейчас: это работает только если вы запускаете manage.py runserver с отладкой =1. Когда вы начнете жить, процесс Django больше не будет обслуживать статические ресурсы. Было бы неэффективно использовать Django для их обслуживания, для этого есть более специализированные инструменты.

Вместо этого вы должны сделать что-то вроде этого:

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

collectstatic готовый сценарий, который готовит этот каталог для вас, чтобы вы могли подключить его непосредственно к сценарию развертывания.

В производственной установке вы хотите иметь постоянные URL. URL-адрес не изменяется, если не изменяется содержимое файла.

Это сделано для того, чтобы клиенты не имели неправильную версию файла CSS или JS на своем компьютере при открытии веб-страницы из Django. Django staticfiles обнаруживает изменения файлов и соответственно обновляет URL-адреса, поэтому, если файл CSS или JS изменяется, веб-браузер загружает новую версию.

Обычно это достигается путем добавления хеша MD5 к имени файла во время collectstatic запустить.

Изменить: также см. Связанный ответ для нескольких приложений.

Это полезно, когда на сайте есть несколько приложений django.

collectstatic Затем будет собирать статические файлы из всех приложений в одном месте, чтобы их можно было использовать в производственной среде.

Другие вопросы по тегам