|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|||||||||||||||||||||
Как передать BLOB поле во вьюшку с конвертированием в base64?12.05.2019, 16:32. Показов 4571. Ответов 18
Добрый день, начинаю изучать Django.
У меня в уже существующей базе есть поле в BLOB формате, в модели оно описано как BinaryField. В этом поле у меня хранятся картинки. У меня получается просто передать в HTML страницу код без конвертирования, но как мне его конвертировать в base64? models.py
0
|
|||||||||||||||||||||
| 12.05.2019, 16:32 | |
|
Ответы с готовыми решениями:
18
Base64-код картинки в BLOB-поле Как скопировать содержимое BLOB поля одной записи в BLOB поле другой? Как правильно передать изображение с контроллера во вьюшку? |
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|||||||
| 12.05.2019, 16:41 | |||||||
|
Если вы храните base64 в бд, то декодировать из base64 нужно ДО отправки данных в шаблон. Либо писать фильтр для шаблона который будет что то делать с кодированной картинкой.
1
|
|||||||
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
||||||
| 12.05.2019, 23:22 [ТС] | ||||||
|
Wi0M, я получаю ошибку:
image_data = obj.data() TypeError: 'bytes' object is not callable В браузере выводит
По поводу рекомендации: да, я знаю, что это не самый лучший вариант, но у меня более 30м картинок и не совсем вариант хранить их в одной папке
0
|
||||||
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|
| 12.05.2019, 23:24 | |
|
потому что надо не image_data = obj.data() а image_data = obj.data. У меня ошибка в предыдущем посте
1
|
|
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|||||||||||
| 13.05.2019, 01:00 [ТС] | |||||||||||
|
Wi0M, оно по идее должно вернуть уже конвертированную строку, но возвращает мне: "b"$R\x05\x0b\xbd5\xe3\x8e=\xf3m\xf8\xd8 \xb6\xdbm\xb6\xdbm\xb6\xdbm\xb6\xdbm\xb6 \xdbm\xb6\xdbm\xb6\xdbm\xb6\xdbm\...."
Но это всё равно не преобразованная строка, хотя я всё по идее сделал правильно: models.py
0
|
|||||||||||
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|
| 13.05.2019, 01:02 | |
|
так ты все верно получил. картинка это набор байтов так то) их ты и кодируешь в base64 и обратно)
0
|
|
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
||||||
| 13.05.2019, 02:05 [ТС] | ||||||
|
Wi0M, так не, если я беру полученную строку закидываю в:
А когда я беру вот эту полученную выше строку, создаю отдельный файл в питоне, беру base64.decodebytes и закидываю туда эту строку, то он мне возвращает уже именно строку в байтах(она тоже состоит из букв, но выглядит немного иначе, без слешей, просто буквами) и когда я закидываю возвращённый мне код вместо {{ img }}, то он мне возвращает именно картинку, как мне и нужно. Я надеюсь, что понятно описал? Или более развёрнуто нужно?) Т.е. формат возвращаемой строки точно такой же, если бы я запрашивал данные из поля напрямую)
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|
| 13.05.2019, 12:35 [ТС] | |
|
Wi0M, а что я конкретно должен прописать вместо {FILTER}? "id=1" подойдёт например? Оно то пишет, что возвращает 1 объект, но я не уверен, что я передаю функцию именно данные этого объекта
0
|
|
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
||||||
| 13.05.2019, 17:10 | ||||||
|
смотри. если ты пытаешься подставить данные картинки в
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|
| 14.05.2019, 00:01 [ТС] | |
|
Wi0M, просто я пытаюсь сделать аналог имеющегося кода в PHP, там дата запихивается в декодер и всё это записывается в <img src="data:image/png;base64, #декодер(дата)#" class="img-thumbnail">
я пытаюсь сделать по аналогии, и я предположил, что мне опять же нужно декодировать свои данные и передать в такого же типа тег. Спасибо за ответы) Добавлено через 59 минут Wi0M, ещё я перебирал без функций декодирования и заметил, что формат TextField возвращает строку: Кликните здесь для просмотра всего текста
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x 01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x 00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\ x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\ x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\ x1d\x1a\x1c\x1c $.\' ",#\x1c\x1c(7),01444\x1f\'9=82<.342\xff\ xdb\x00C\x01\t\t\t\x0c\x0b\x0c\x18\r\r\x 182!\x1c!2222222222222222222222222222222 2222222222222222222\xff\xc0\x00\x11\x08\ x01a\x01\x13\x03\x01"\x00\x02\x11\x01\x0 3\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x0 5\x01\x01\x01\x01\x01\x01\x00\x00\x00\x0 0\x00\x00\x00\x00\x01\x02\x03\x04\x05\x0 6\x07\x08\t\n\x0b\xff\xc4\x00\xb5\x10\x0 0\x02\x01\x03\x03\x02\x04\x03\x05\x05\x0 4\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x 11\x05\x12!1A\x06\x13Qa\x07"q\x142\x81\x 91\xa1\x08#B\xb1\xc1\x15R\xd1\xf0$3br\x8 2\t\n\x16\x17\x18\x19\x1a%&\'()*456789:C DEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\ x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\ x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\ xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\ xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\ xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\ xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\ xea\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\ xfa\xff\xc4\x00\x1f\x01\x00\x03\x01\x01\ x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\ x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\ x08\t\n\x0b\xff\xc4\x00\xb5\x11\x00\x02\ x01\x02\x04\x04\x03\x04\x07\x05\x04\x04\ x00\x01\x02w\x00\x01\x02\x03\x11\x04\x05 !1\x06\x12AQ\x07aq\x13"2\x81\x08\x14B\x9 1\xa1\xb1\xc1\t#3R\xf0\x15br\xd1\n\x16$4 \xe1%\xf1\x17\x18\x19\x1a&\'()*56789:CDE FGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x8 4\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x9 5\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa 6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb 7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc 8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd 9\xda\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xe a\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xf f\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x1 1\x00?\x00\xf5\x90*U\x1d\xe9\x8bR\x0e\x9 5\x05\x0e\xe2\x8a9\xa3\xd0P\x02\xf6\xa34 \xbcRP\x02v\xe9KA\xa3?\x95\x00&}))MF\xd3 F\xbc3\x81\xf54\x00\xf3\xdf\x9aB\xc0Vf\x a3\xad\xdai\xb1\x17\x9aA\xd38\x1dk\xcd|M \xf1@<F\x1d8`\xf6\x93$\x11\xef\x8a\x97.\ xc3\xb1\xeb\x13\xdd\xc3o\x1bI4\xa8\x88\x bc\x96c\x80+\x91\xd7>$h\xfaR\xe27\xfbL\x 9d\x84}\x07\xe3^3\xaax\xbbS\xd4\xf7- и т.д.(всё не вмещается в сообщение)
И заметил, что формат BinaryField не возвращает ничего, только объект айдишником записи Формат в базе по прежнему BLOB Совершенно потерялся и не понимаю уже, что можно делать с полученной строкой, чтобы получить изображение. Перелопатил все форумы, не могу найти конкретного решения. В самой базе картинка открывается корректно.
0
|
|
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|
| 14.05.2019, 00:07 | |
|
то что ты пишешь в классе модели FileField еще на значит что у тебя в БД будет тот же тип) Такого типа нет вовсе в базах данных) А джанго использует свои внутренние механизмы определения типо под класс поля модели. Тебе туда бы не лезть вообще) Ты сохраняешь картинку в base64 в модель? а получая, НЕ декодируй из base64. Вот и все.
0
|
|
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|||||||||||||||||||||
| 14.05.2019, 01:37 [ТС] | |||||||||||||||||||||
|
Wi0M, я работаю просто по уже существующей базе, закидывали туда фотки ещё до меня. До этого, чтобы доставать такие фотки и записывать на диск мне требовался тоже конвертер такого формата
Кликните здесь для просмотра всего текста
Записывать это уже тривиальная задача, мне бы её считать как-нибудь оттуда) Окей. Разложу всё по деталям. Делаю без декодирования В базе находится BLOB(65535) В models.py
При этом imgs.photo возвращает строку: Кликните здесь для просмотра всего текста
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x 01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x 00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\ x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\ x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\ x1d\x1a\x1c\x1c $.\'
длиной 35012 символов Что в коде не так? Не могу понять
0
|
|||||||||||||||||||||
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|||||||||||
| 14.05.2019, 08:28 | |||||||||||
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|
| 14.05.2019, 08:46 [ТС] | |
|
Wi0M, если я для ячейки выберу тип отображаемого изображения "картинка", то она корректно отображается как картинка. Из этого вывод - картинка, но в поле blob
0
|
|
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|
| 14.05.2019, 09:10 | |
|
да это и так видно по данным которые хранятся в БД. из этого и вывод что требуется кодирование в base64
0
|
|
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|
| 14.05.2019, 11:01 [ТС] | |
|
Wi0M, мне нужно делать encodebytes или decodebytes? Я предполагаю, что encodebytes
0
|
|
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|
| 14.05.2019, 11:30 | |
|
base64.b64encode
0
|
|
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|||||||||||
| 14.05.2019, 23:39 [ТС] | |||||||||||
|
Wi0M, вот, беру:
При этом уже перебрал и кучу других вариаций
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 28
|
|
| 18.05.2019, 16:46 [ТС] | |
|
Wi0M, в Python 3 base64.b64encode()функция возвращает закодированные байты, а не строку. Из-за этого URI данные отображаются как data:image/jpeg;base64,b'/9j/4AA...', в то время как они должен быть data:image/jpeg;base64,/9j/4AA.... Чтобы это исправить, декодируйте байты в строку, например, используя base64.b64encode(obj.photo).decode().
0
|
|
| 18.05.2019, 16:46 | |
|
Помогаю со студенческими работами здесь
19
Как создать вьюшку состоящую из документов в которых в поле отправлени
Как занести картинку в BLOB-поле? Как редактировать поле данных типа blob? Как записать Blob поле в DBF таблицу ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|