Задать вопрос

Можно ли складывать статические файлы django сразу в STATIC_ROOT?

Добрый вечер.
У меня может и глупый, но очень мучающий меня вопрос: во всех руководствах по статическим файлам в Django написано, что нужно использовать команду collectstatic для сбора файлов в папку, указанной в настройках в переменной STATIC_ROOT.
Я не понимаю откуда Django собирает эти файлы. Разве все файлы сразу не лежат в какой-то общей папке? Я, может по своей глупости, складывал все файлы в папку media, аккуратно, по полочкам. Потом использовал MEDIA_ROOT, MEDIA_URL и все работало. А сейчас, после некоторого перерыва решил разобраться, правильно ли это. В чем принципиальная разница между STATIC и MEDIA?
  • Вопрос задан
  • 3876 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
syschel
@syschel
freelance/python/django/backend
STATIC_ROOT - дирректория где хранятся не изменяемые файлы. Как правило это вёрстка дизайна, ключи верификации и так далее. То что разработчик сайта сохранил на всегда.
MEDIA_ROOT - Дирректория пользовательских файлов. То что заливают пользователи (аватарки, текстовики/архивы), то что движок может генерировать сам (к примеру скрипт тырит картинки с другого сайта и складирует тут).

Я не понимаю откуда Django собирает эти файлы.

Есть папка, куда предварительно скидывает статичные файлы разработчик. Пути пишутся в STATICFILES_DIRS. После применения collectstatic, файлы переносятся (клонируются) в папку путь к которой указан в STATIC_ROOT.

Мой вариант (1.6.)
import os
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_PATH, "media")
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_PATH, "static")
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(PROJECT_PATH, "dev_static"),
)


И да, самое главное. Да! Складывать сразу можно, джанго не обидится. А вот в обратку, сложить в STATICFILES_DIRS и не выполнить collectstatic, а потом надеяться увидеть файлы в STATIC_ROOT, нельзя.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы