-
Страничка в utf-8, но поля формы нужно заполнить в win. При попытке передать в шаблон win-строку, Джанга заменяет её пустой.
Как быть? Есть ли варианты, кроме отказа от Джанга-шаблонов? -
Страничка в utf-8, но поля формы нужно заполнить в win
Поясни, как это? Если браузер выдает страницу в utf-8, то он и результат при сабмите формы передаст на сервер в utf-8.
Шаблоны, кстати, можно держать в любой кодировке...
-
Нужно настроить приём платежей через Merchant Webmoney. Они принимают post-запрос в win кодировке. Если описание платежа по русски и послать его, например в utf-8, в процессе платежа оно отобразится иероглифами.
Чтобы не возникло путанницы ещё раз: иероглифы получаются в формах генерируемых wm в процессе платежа: https://merchant.webmoney.ru/lmi/payment.asp
Сам сайт в utf-8 включая страничку герерации формы. Поле с описанием на этой страничке скрытое, в него пытаюсь положить {'desc':desc.decode('utf-8').encode('windows-1251')}.
Ложится пустая строка. -
Правильно ли я понимаю, что ты отображаешь некую форму, которая потом сабмитится не обратно в твое приложение, а в WM?
Если так, то достаточно наверное просто выводить страницу с формой в windows-1251:
content = render_to_string('form.html', {...}) return HttpResponse(content, mimetype='text/html; charset=windows-1251')Поле с описанием на этой страничке скрытое, в него пытаюсь положить {'desc':desc.decode('utf-8').encode('windows-1251')}.
Шаблонная система вообще про кодировки ничего не знает, работает в юникоде. Конвертация в конкретную байтовую кодировку уже при выводе в response делается.
-
> ты отображаешь некую форму, которая потом сабмитится не обратно в твое приложение, а в WM?
Всё верно. Но, так и не срослось, к сожалению. Mimetype, похоже, просто заголовок меняет.
Т.е. если шаблон в utf-8, всё иероглифами отображается.
Если шаблон в win, вываливается: 'utf8' codec can't decode bytes in position 49-50: invalid data. -
енкодить надо не переменную перед рендерингом шаблона, а результат
content = render_to_string('form.html', {'desc':desc}).encode('windows-1251')
return HttpResponse(content, mimetype='text/html; charset=windows-1251')
будет на юникодном сайте одна страница в cp-1251 -
Да, shiberz правильно написал. Надо действительно вручную заенкодить весь отрендеренный шаблон.
И еще раз — кодировка шаблонного файла никак не связана с тем, как это все будет выводиться в браузер.
-
То, что нужно. Большое спасибо :)
-
Продолжение следует... теперь нужно принять ответ от WM :))
Т.е. приходит пост-запрос в win кодировке на сайт в utf-8. В request.POST пустой словарь. Есть ли тут законные решения? -
Да. Специально для таких случаев можно явно указать кодировку запроса.
-
Работает, спасибище :)

