170 похожих чатов

Братья-Джангисты, нужна ваша помощь. Вот реально, возился с этой темой

несколько дней из-за того, что считал её не особо сложной, ну или я просто тупой.
Перехожу к сути, проблема с изображениями. В settings.py уже давно повбивал и STATIC_URL="/static/", и STATIC_ROOT= os.path.join(BASE_DIR, "/static/") (с MEDIA_URL/ROOT практически также, только указал, что папка медиа лежит в папке статик). Немного позже объясню зачем я это упомянул.

Я же правильно понимаю, что изображения должны храниться в отдельной папке (media), а эта папка с изображениями должна храниться в статике, т.к изображения относятся к статической лабуде, как и css и js файлы.

Еще один важный момент нужно уточнить, мой путь к изображению хранится в поле экземпляра модели и именно его я ввожу в атрибут src тега img. И насколько я понимаю путь к файлу с изображением не должен быть полным, т.е. только папка, в которой лежит файл и имя самого файла(/media/photo.png). Ну, а как иначе-то, когда буду заливать сайт на хост, то там нихера и не будет диска C и подобной штуки.

Я пытался и добавлять к списку urlpatterns в urls.py что-то (результат работы функции static, вроде, передавая в неё MEDIA_URL и ROOT). И ничего не работало, просто файл не находился.

А потом решил другим способом вывести картинку. Прописал прямо перед тегом выражение {%load static%}(в html файле), еще и в src атрибут передал выражение, а не просто путь: {%static post.image%} (post.image это непольный путь к изображению). И потом...
Все заработало, изображение нашлось и нормально отобразилось.

Оглядываясь на все описанное выше я не понимаю, почему пришел к выводу, что указание одного неполного пути к картинке будет достаточно. Возможно из-за того, что думал джанга возьмет и найдет файл, пройдясь по MEDIA_ROOT или где-то подобную чушь вычитал. Но зачем тогда прописывать MEDIA_URL/ROOT, если убрав их и применив статику (функции static) ничего не меняется и все нормально отображается?
Может как-то иначе нужно выводить изображения и я херню какую-то сделал, которая чудом работает? Да и вообще, нормально ли работать с изображениями силами одной Джанги (когда изображение не находилось докопался до того, что "вывод изображений с помощью django.contrib.staticfiles не безопасен в реальном бою, нужно использовать nginx или апачу")? Или джанга в связке с ним только и работает?

P.s. по поводу поля, в котором хранится путь к картинке, это поле является ImageField

2 ответов

14 просмотров

Для отображения на странице нужен относительный путь. MEDIA_ROOT нужна, чтобы джанга знала куда складывать файлы и при включенном дебаг режиме знать откуда их отображать.

media - это контентные файлы, например картинки статей, те что грузятся из админки или пользователями static - условно статика необходимая для работы сайта, такая как js, css файлы, а так же картинки которые необходимы для отображения самого сайта(условно картинки кнопок, фонов сайта... чего то такого) Суть в том что обычно это так /static /media а не /static /static/media Да обработка статики обычно идет за счет nginx, ибо он статику отдает более быстро. И ему требуется на много меньше ресурсов чем самой django(python). {%load static%} И работа через этот модуль именно для статичных файлов абсолютно верна. Но не путать с media файлами. Надеюсь я верно понял твой вопрос... 🙂

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта