4

Я не знаю, смущаю ли я цель collectstatic. Вот мой модуль настройки:Django: «Собирать» должно собирать медиафайлы?

# BASE_DIR is the location of my django project folder 

STATIC_URL = '/this.static/' 
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "ve_static_root") 
STATICFILES_DIRS = (

    os.path.join(BASE_DIR, "this.static"), 
    os.path.join(BASE_DIR, "this.media"), 

        ) 
MEDIA_URL = '/this.media/' 
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "ve_media_root") 

Здесь я положил оба мои статические файлы и мультимедийные файлы в STATICFILES_DIRS, так что я могу использовать медиа-файлы в качестве легкой ссылки, когда я вспоминаю/вставлять изображения в мои уценке документы, но как вы также можете видеть, я сделал путь для MEDIA_ROOT, который должен отличаться от STATIC_ROOT. Меня беспокоит то, что я разместил папку с медиафайлами this.media в папке STATICFILES_DIRS, что позволяет мне вызывать изображения или видео в шаблоны Django, используя эти фильтры статического файла, например {% static 'image/file/path/here' %}. Насколько мне удобно, я также задавался вопросом, что означает MEDIA_ROOT, если все мои файлы, изображения/видео и файлы веб-дизайна просто входят в STATIC_ROOT? Насколько я знаю, Django не имеет команды collectmedia, поэтому я действительно ничего не собираю в папку MEDIA_ROOT. Я просто его здесь, пустой и все.

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

ответ

2

Django documentation обескураживает наличие статического корня и медиа-корня в качестве одного и того же каталога (наличие их в пределах одного родительского каталога предположительно в порядке). Хотя это не связано с документами, причина связана с неопределенностью, присущей пользовательским файлам. Если как статические, так и мультимедийные файлы подаются из аналогичных каталогов, тогда пользователь при подходящих обстоятельствах может загрузить любой файл, который впоследствии может быть отправлен. Это, конечно, создает серьезные уязвимости безопасности - это мотивация наличия двух отдельных каталогов для этих двух классов файлов.

collectstatic полагается на массив STATICFILES_DIRS, чтобы сгенерировать список каталогов, через которые collectstatic должен искать статические файлы. Если вы включаете медиафайлы в STATICFILES_DIRS, то при запуске collectstatic (как спровоцировано вами или автоматическим сервисом, например Fabric), носители и статические файлы будут жить в том же каталоге выходных данных.

В документации также есть раздел о Serving files uploaded by a user during development, который вы можете сделать просто, обратившись к URL-адресу, на котором существуют медиафайлы, как и с любым статическим файлом. Вы можете просто добавить

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

к вашей конфигурации URL.

django.contrib.staticfiles.views.serve() однако не следует использовать для развертывания. Я уже писал об этом here. Настоятельно рекомендуется, чтобы вы обслуживали ваши статические файлы (и сохраняли и обслуживали медиафайлы, если необходимо) из каталога вне вашего проекта, на производстве.

1

Файлы мультимедиа - это файлы, которые пользователи загружают на ваш сайт Django.

Статические файлы - это файлы, которые вы хотите обслуживать как часть сайта (как правило, CSS, JavaScript и изображения).

Как таковой, я бы не ожидал, что collectstatic сделает что-нибудь с медиафайлами.

Смежные вопросы