В odoo 13 у меня есть пример поля:
birthday_picture = fields.Image(string='Birthday Picture')
Я хочу добавить birthday_picture изображение, которое будет добавлено в шаблон электронной почты, который я объявил в xml, я добавил тег <img> и добавил, что изображение не отражается ниже, я поделился строкой
<div>
<img src = "${'/birthday_picture.png=%s' % object.birthday_picture}" style = "width: 60px; height: 60px"/><br/>
</div>
Пожалуйста, дайте мне знать, где я делаю неправильно
Если birthday_picture должен быть динамическим (это означает, что один и тот же шаблон электронной почты может отображать разные изображения), вам следует рассмотреть возможность использования fields.Binary
Fields.Binary сохраняет двоичный файл в odoo filesystem и возвращает строку в кодировке base64.
birthday_picture = fields.Binary(string='Birthday Picture')
<img src = "${'data:image/png;base64,%s' % object.birthday_picture}" style = "width: 60px; height: 60px"/>
В случае, если birthday_picture всегда один и тот же (поэтому он статичен), лучшим решением будет создать ir.attachment, установить его как общедоступный и отобразить в src его URL-адрес.
Другой вариант — вручную преобразовать ваш файл в base64 с помощью онлайн-инструмента и заменить значение src закодированной строкой.
Можете ли вы отладить необработанное тело электронной почты, чтобы понять, что оно печатает вместо строки base64? Также вы уверены, что модель, выбранная в mail.template, является той же моделью, в которой вы добавили поле birthday_picture? Попробуйте напечатать object.birthday_picture в шаблоне электронной почты для дальнейшего изучения
Да, я уверен, что birthday_picture находится в той же модели, что и в mail.template, также я уже проверил, что печатается вместо строки base64, это печатает двоичный формат изображения.
Это означает, что двоичные данные должны быть сначала преобразованы в base64. Вы можете использовать вспомогательные функции image_data_uri или to_text qweb, чтобы получить это. Например: ${'data:image/png;base64,%s' % image_data_uri(object.birthday_picture)}
Нет, я все еще не вижу шаблон, чтобы отразить изображение, но я уже решил это
На самом деле я добавил это:
<p>
<img src = "/web/image/birthday.reminder/${object.id}/birthday_picture/"/>
</p>
Который не отражает изображение в шаблоне, но когда я искал недоставленное письмо от techncal > email. удалив force_send из кода, я смогу увидеть свое отражение в нем.
Однако я уже искал, что электронная почта не поддерживает base64 изображения, но для этого также есть настройка. вот ссылка которая описывает твик
Да, брат, я хочу, чтобы изображение было динамическим, и, как вы сказали выше, я попробовал это, но все еще не возвращает изображение, которое я предоставляю в двоичном поле.