Найти - Пользователи
Полная версия: EmailMultiAlternatives принципиальное отличие
Начало » Django » EmailMultiAlternatives принципиальное отличие
1
romankrv
В чем принципиальное отличие? когда я используя функцию render_to_string то (особенно когда идут символы код ascii >127)

первый вариант:
полученное значение предварительно записываю в базу затем делаю выборку этого поля и отсылаю содержимое этого поля на почтовый ящик с помощи функции EmailMultiAlternatives.

второй вариант:
когда я не использую базу данных и напрямую посылаю это значенние при помощи функции EmailMultiAlternatives как альтернативным текстом.
То есть без предварительной обработки во втором случаи отсылается как альтернативным текстом примерно такое
In : render_to_string('letter_placeholder.html'),
Out: (u'\u0412\u0430\u043c <b>\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438e \u043e\u0442</b> <i> </i>',)

и письмо естественно содержит эти кода (\u0441) а не читабельные буквы

Я единственное могу предположить что в первом варианте при сохранении в базу срабатывает какой то внутренний механизм конвертации. Если это так то хотелось взглянуть ему прямо в глаза. :)
А во втором случаии я должен вручную обрабатывать и выдавать коды нтмл символов что то типа
tmp = '&#'+str(ord(u'\u0430'))+';' 
msg.attach_alternative(tmp, "text/html")
чтобы передать правильный код символа типа &#4059;

Вот собственно и все что я и хотел сказать и спросить в этом посте

Спасибо
Александр Кошелев
romankrv
Я единственное могу предположить что в первом варианте при сохранении в базу срабатывает какой то внутренний механизм конвертации. Если это так то хотелось взглянуть ему прямо в глаза.
Это уникод. Все строки джанги в нем.
romankrv
А во втором случаии я должен вручную обрабатывать и выдавать коды нтмл символов что то типа
Я тебе писал, что надо уникодную строку превратить в байтовую с нужной кодировкой. Для этого есть smart_str в django.utils.encoding
romankrv
Daevaorn
Для этого есть smart_str в django.utils.encoding
Я только не пойму для чего приводить с помощью django.utils.encoding юникод строку в строку как эта:
'\xd0\x92\xd0\xb0\xd0\xbc <b>\xd1\x81\xd0\xbe\xd0\xbe\xd0\xb1\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8e \xd0\xbe\xd1\x82</b> <i> </i>'
то есть как дальше это использовать?
я понял что эта функция предназначена для html-вывода и используется как обертка для encode('utf8')
#?encoding

и с какой целью разложено число на две состовляющие то есть первая часть это как я понял базис диапазона алфавита? d0
и почему не годиться код который делает коды букв итп как строку и передовать ее уже в функцию attach_alternative(tmp, “text/html”) где tmp = _&#XXXX;
tmp = '&#'+str(ord(u'\u0430'))+';' 
msg.attach_alternative(tmp, "text/html")
спасибо
Александр Кошелев
romankrv
то есть как дальше это использовать?
отправлять
romankrv
я понял что эта функция предназначена для html-вывода
это функция для умного преобразования уникодной строки в байтовую.
romankrv
и с какой целью разложено число на две состовляющие то есть первая часть это как я понял базис диапазона алфавита? d0
это кодировка utf8

Ром, почитай про уникод вобще и про его исользование в питоне в частности.
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