Найти - Пользователи
Полная версия: Хранение статических файлов в Django
Начало » Django » Хранение статических файлов в Django
1
vadval15
По умолчанию статические файлы Django должны храниться в папке static, но какие тогда файлы хранятся в папке media и в чём их кардинальное отличие от первых? Буду признателен за любой ответ по данному вопросу.
FishHook
vadval15
По умолчанию статические файлы Django должны храниться в папке static, но какие тогда файлы хранятся в папке media и в чём их кардинальное отличие от первых? Буду признателен за любой ответ по данному вопросу
Статические они потому и статические, потому что не подразумевают никакого динамического изменения. Каталог медиа нужен для того, чтобы ваши пользователи могли загружать в систему файлы и удалять их. Например, у вас есть админка сайта, в админке вы настраивате ваш сайт, например добавляете-удаляете статьи, к статье вы можете прикрепить какие-то изображения. Куда вы планируете загружать эти изображения?
FishHook
Иначе говоря, если вы продадите движок вашего сайта, то покупатель должен получить его со всей статикой в каталоге static, но с пустым каталогом media
vadval15
Спасибо за ответ. Для одной из библиотек, easy-thumbnails, необходимо, чтобы исходные файлы изображений, а также миниатюры, статические по своей сути, находились в какой-либо из папок media. При этом они, в отличие от аналогичных файлов папки static, перестают отображаться на сайте. Можно ли как-то избежать отрицательных последствий такого разделения?
FishHook
vadval15
Можно ли как-то избежать отрицательных последствий такого разделения?
настройте ваш веб-сервер на отдачу изображений из media каталога и не будет никаких проблем.
vadval15
Спасибо за ответ. Насколько мне известно, отображение файлов из папки static производится с помощью соответствующего приложения, подключаемого в файле настроек settings.py. Может быть, подобное приложение имеется и для папки media?
FishHook
vadval15
Насколько мне известно, отображение файлов из папки static производится с помощью соответствующего приложения

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

vadval15
Насколько мне известно
Чтобы не гадать, нужно читать документацию
https://docs.djangoproject.com/en/3.0/howto/static-files/
vadval15
Спасибо за совет, но я привык решать проблемы по мере их поступления. А данная проблема пока решается лишь переносом папки media внутрь папки static. Изложенное же в документации (https://djbook.ru/rel1.8/howto/static-files/index.html) предложение по включению в файл urls.py при MEDIA_URL=/media/ дополнительной строки:
 + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
никакого результата не даёт.
VadimK
В конфиг файле джанги должно быть что то вроде:
 MEDIA_ROOT = os.path.join(VAR_DIR, 'htdocs/media')
MEDIA_URL = '/media/'
где в первой строке указывается полный путь куда грузить медиа файлы, а во второй относительный путь в браузере.

Далее в urls что то вроде такого:
 from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf.urls import include, url
urlpatterns = [
    url(r'^admin/', admin.site.urls),
# и прочие адреса проекта
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + staticfiles_urlpatterns()

Тогда джанга будет отдавать /media/ + /static/
Но по хорошему это она должна делать только на девелоперской машине. В продакшене с этих директорий раздает непосредственно вэб сервер, т.е. запрос к джанге дойти не может.

никакого результата не даёт.
А результат каким образом планируется получить ? Напрямую запрос к файлу через браузер или каким нибудь тегом в темплейте ?
vadval15
Спасибо за ответ. Оказывается, любая из рекомендуемых для включения в файл urls.py строк позволяет использовать файлы из папки media в качестве статических, но с соблюдением одного условия: она должна располагаться перед шаблоном URL-адреса, содержащим регулярное выражение, охватывающее все возможные символы, если такой присутствует в указанном файле. Это на первый взгляд очевидное условие заставляет внимательнее добавлять новую строку к уже имеющемуся списку шаблонов URL-адресов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB