Какова лучшая практика для обслуживания статических файлов в Django в настоящее время - PullRequest
3 голосов
/ 29 сентября 2011

Я нашел много советов о том, как работать со статическими файлами в Django 1.x. Есть ли лучший способ сделать это?

1 Ответ

7 голосов
/ 29 сентября 2011

В Django могут быть подходы к обслуживанию статических файлов, но в Django 1.3 появилась новая опция для их обработки.По сути, вы можете определить конкретные каталоги на уровне проекта или на уровне приложения, которые содержат статические носители.Затем с помощью команды управления «collectstatic» вы можете скопировать все статические файлы в каталоге вашего проекта в отдельный каталог (вероятно, внешний по отношению к вашему проекту), который обслуживается вашим веб-сервером.Это решает множество сложностей предыдущих подходов.

1) Это позволяет сторонним приложениям легко включать статические файлы стандартным способом.Больше не нужно создавать символические ссылки из каталога вашего веб-сервера в местах внутри отдельных модулей python / django.

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

3) Разделяет статический носитель, который никогда не изменится со статического носителя, загруженного пользователем с помощью чего-то вроде FileField.Это хорошо, потому что вы, вероятно, хотите сохранить статический носитель на уровне сайта в управлении версиями (для установки на ваших серверах разработчиков), но пользовательский контент будет загружаться в другой каталог (в отличие от версий django до 1.3).

Я думаю, что раньше это был сторонний модуль, который был объединен с ядром.

Вот документы: https://docs.djangoproject.com/en/dev/howto/static-files/

В основном есть несколько новых переменных settings.py:

STATIC_ROOT - это каталог в вашей файловой системе, который будет обслуживатьсявашим веб-сервером.Когда вы запустите ./manage.py collectstatic, все статические файлы из вашего проекта и его приложений будут скопированы в указанную вами директорию.

STATIC_URL - это URL, который вы зададите для представления того, с какого URL будет базироваться ваш контент.Если вы установите это значение в «/ static /», то «/ static /» будет префиксом всех URL включенных статических носителей.Вы также будете использовать эту переменную в своих шаблонах.Например, в вашем шаблоне вы можете указать что-то вроде:

    <img src="{{ STATIC_URL }}logo.png">

Переменная настроек STATIC_ROOT указывает, куда копируются статические файлы, но вам также необходимо указать место, откуда копируются статические файлы.Это можно сделать, создав каталог в ваших отдельных приложениях Django под названием «static //», аналогично тому, что вы сделали бы для шаблонов в приложении.После запуска команды collectstatic, Django скопирует все статические файлы из всех каталогов «static /» во всех ваших приложениях в каталог STATIC_ROOT.Вы также можете использовать переменную настроек STATICFILES_DIRS, чтобы определить каталоги уровня проекта для копирования статического носителя.

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

Надеюсь, это поможет, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...