Форум сайта python.su
Помогите разобраться с проблемой.
Использую web.py и jinja2.
При попытке сделать {{ lf.render_css() }} в шаблоне получаю ошибку UnicodeDecodeError:
File “code.py”, line 154, in GET
return render.login(login_form = lf)
File “C:\Python26\lib\site-packages\jinja2-2.5.5-py2.6.egg\jinja2\environment.py”, line 891, in render
return self.environment.handle_exception(exc_info, True)
File “templates\login.html”, line 23, in top-level template code
{{ login_form.render_css() }}
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 22: ordinal not in range(128)
В консоль отрендеренные поля формы выводятся.
code.py и login.html в utf-8. Jinja2 вроде как изначально использует юникод.
code.py:
# -*- coding: utf-8 -*-
import web
from web.contrib.template import render_jinja
from web import form
urls = (
'/login', 'Login',
)
app = web.application(urls, globals())
render = render_jinja(
'templates',
encoding = 'utf-8',
)
class Login:
login_form = form.Form(
form.Textbox('username', description=u'Логин'),
form.Password('password', description=u'Пароль'),
form.Button('Ok', type='submit', description=u'Ok')
)
def GET(self):
lf = self.login_form()
print lf.render_css()
return render.login(login_form = lf)
if __name__ == "__main__":
app.run()
Офлайн
Кстати, не могу понять почему в ошибке фигурирует ‘ascii’ кодек.
Офлайн
login_form.render_css() должен возвращать уникод
Офлайн
Судя по тому, что поиск ничего не дал, то я делаю что-то не так. Я могу конечно заняться monkey patching'ом и сделать свою версию form.Item.render(), form.Item.noterender() (чтобы можно было делать рендер отдельных полей формы) и form.Form.render_css(). Но возможно, кто-нибудь сталкивался с такой проблемой?
Офлайн