Django: Предполагается ли, что collectstatic также собирает медиафайлы?

Я не знаю, не путаю ли я цель collectstatic. Вот мой модуль настроек:

# 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. Я просмотрел документы по статическим файлам, и они действительно не очень полезны в отношении медиафайлов.


person JellisHeRo    schedule 06.08.2015    source источник


Ответы (2)


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

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

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

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

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

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

person ilkahnate    schedule 06.08.2015

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

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

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

person wobbily_col    schedule 06.08.2015