Попробуй так:
# coding: utf-8
myform = form.Form(
form.Textbox("surname", description="Фамилия"),
)
On Apr 30, 3:36 pm, Tanya Gornak <[email protected]> wrote:
> String that passed throw is u'\u0424\u0430\u043c\u0438\u043b\u0438\u044f'
> Traceback from terminal:
> Traceback (most recent call last):
> File "/home/melandory/project/inquire/web/application.py", line 242,
> in process
> return self.handle()
> File "/home/melandory/project/inquire/web/application.py", line 233,
> in handle
> return self._delegate(fn, self.fvars, args)
> File "/home/melandory/project/inquire/web/application.py", line 412,
> in _delegate
> return handle_class(cls)
> File "/home/melandory/project/inquire/web/application.py", line 387,
> in handle_class
> return tocall(*args)
> File "/home/melandory/project/inquire/application.py", line 22, in GET
> return render.formtest(form)
> File "/home/melandory/project/inquire/web/template.py", line 868, in
> __call__
> return BaseTemplate.__call__(self, *a, **kw)
> File "/home/melandory/project/inquire/web/template.py", line 781, in
> __call__
> return self._join_output(out)
> File "/home/melandory/project/inquire/web/template.py", line 787, in
> _join_output
> for name, value in out:
> File "templates/formtest.html", line 6, in __template__
> <input type="submit" /> </form>
> File "/home/melandory/project/inquire/web/form.py", line 46, in render
> out += ' <tr><th><label
> for="%s">%s</label></th><td>%s</td></tr>\n' % (i.id,
> net.websafe(i.description), html)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position
> 0: ordinal not in range(128)
>
> On 30 April 2010 15:06, Tanya Gornak <[email protected]> wrote:
>
>
>
>
>
> > I forgot to write error:
>
> > <type 'exceptions.UnicodeDecodeError'> at /
>
> > 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in
> > range(128)
>
> > Python /usr/local/lib/python2.6/dist-packages/web/form.py in render, line 43
>
> > On 30 April 2010 15:04, melandory <[email protected]> wrote:
>
> >> Hi. I have problem in unicode in forms.
>
> >> This code:
> >> myform = form.Form(
> >> form.Textbox(u'Фамилия'))
>
> >> Produce Traceback:
>
> >> # /usr/local/lib/python2.6/dist-packages/web/form.py in render
>
> >> 36. out += '<table>\n'
> >> 37.
> >> 38. for i in self.inputs:
> >> 39. html = i.pre + i.render() + self.rendernote(i.note) + i.post
> >> 40. if i.is_hidden():
> >> 41. out += ' <tr style="display: none;"><th></th><td>%s</td></tr>\n'
> >> % (html)
> >> 42. else:
>
> >> 43. out += ' <tr><th><label for="%s">%s</label></th><td>%s</td></tr>
> >> \n' % (i.id, net.websafe(i.description), html) ...
>
> >> 44. out += "</table>"
> >> 45. return out
> >> 46.
> >> 47. def render_css(self):
> >> 48. out = []
> >> 49. out.append(self.rendernote(self.note))
>
> >> ▶ Local vars
> >> Variable Value
> >> html
> >> '<input type="text"
> >> id="\xd0\xa0\xc2\xa4\xd0\xa0\xc2\xb0\xd0\xa0\xd1\x98\xd0\xa0\xd1\x91\xd0\xa
> >> 0\xc2\xbb
> >> \xd0\xa0\xd1\x91\xd0\xa1\xd0\x8f"
> >> name="\xd0\xa0\xc2\xa4\xd0\xa0\xc2\xb0\xd0\xa0\xd1\x98\xd0\xa0\xd1\x91\xd0\
> >> xa0\xc2\xbb
> >> \xd0\xa0\xd1\x91\xd0\xa1\xd0\x8f"/>'
> >> i
> >> <web.form.Textbox object at 0x998352c>
> >> out
> >> '<table>\n'
> >> self
> >> <web.form.Form instance at 0x998346c>
> >> # templates/formtest.html in __template__
>
> >> 0. $def with (form)
> >> 1.
> >> 2. <form name="main" method="post">
> >> 3. $if not form.valid: <p class="error">Try again, AmeriCAN:</p>
> >> 4. $:form.render()
>
> >> 5. <input type="submit" /> </form> ...
>
> >> 6.
>
> >> ▶ Local vars
> >> Variable Value
> >> form
> >> <web.form.Form instance at 0x998346c>
> >> # /usr/local/lib/python2.6/dist-packages/web/template.py in
> >> _join_output
>
> >> 779. out = self.t(*a, **kw)
> >> 780. return self._join_output(out)
> >> 781.
> >> 782. def _join_output(self, out):
> >> 783. d = TemplateResult()
> >> 784. data = []
> >> 785.
>
> >> 786. for name, value in out: ...
>
> >> 787. if name:
> >> 788. d[name] = value
> >> 789. else:
> >> 790. data.append(value)
> >> 791.
> >> 792. d.__body__ = u"".join(data)
>
> >> ▶ Local vars
> >> Variable Value
> >> d
> >> <TemplateResult: {}>
> >> data
> >> [u'\n', u'<form name="main" method="post"> \n']
> >> name
> >> ''
> >> out
> >> <generator object __template__ at 0x9a49464>
> >> self
> >> <web.template.Template instance at 0x9a436ac>
> >> value
> >> u'<form name="main" method="post"> \n'
> >> # /usr/local/lib/python2.6/dist-packages/web/template.py in __call__
>
> >> 773. def _compile(self, code):
> >> 774. env = self.make_env(self._globals or {}, self._builtins)
> >> 775. exec(code, env)
> >> 776. return env['__template__']
> >> 777.
> >> 778. def __call__(self, *a, **kw):
> >> 779. out = self.t(*a, **kw)
>
> >> 780. return self._join_output(out) ...
>
> >> 781.
> >> 782. def _join_output(self, out):
> >> 783. d = TemplateResult()
> >> 784. data = []
> >> 785.
> >> 786. for name, value in out:
>
> >> ▶ Local vars
> >> Variable Value
> >> a
> >> (<web.form.Form instance at 0x998346c>,)
> >> kw
> >> {}
> >> out
> >> <generator object __template__ at 0x9a49464>
> >> self
> >> <web.template.Template instance at 0x9a436ac>
> >> # /usr/local/lib/python2.6/dist-packages/web/template.py in __call__
>
> >> 860. normalize_text = staticmethod(normalize_text)
> >> 861.
> >> 862. def __call__(self, *a, **kw):
> >> 863. import webapi as web
> >> 864. if 'headers' in web.ctx and self.content_type:
> >> 865. web.header('Content-Type', self.content_type, unique=True)
> >> 866.
>
> >> 867. return BaseTemplate.__call__(self, *a, **kw) ...
>
> >> 868.
> >> 869. def generate_code(text, filename):
> >> 870. # parse the text
> >> 871. rootnode = Parser(text, filename).parse()
> >> 872.
> >> 873. # generate python code from the parse tree
>
> >> ▶ Local vars
> >> Variable Value
> >> a
> >> (<web.form.Form instance at 0x998346c>,)
> >> kw
> >> {}
> >> self
> >> <web.template.Template instance at 0x9a436ac>
> >> web
> >> <module 'web.webapi' from '/usr/local/lib/python2.6/dist-packages/web/
> >> webapi.pyc'>
> >> # /home/melandory/project/inquire/application.py in GET
>
> >> 14. form.Validator('Must be more than 5', lambda x:int(x)>5)),
> >> 15. form.Textarea(u'Name'),
> >> 16. form.Dropdown(u'Choise', ['mustard', 'fries', 'wine']))
> >> 17.
> >> 18. class index:
> >> 19. def GET(self):
> >> 20. form = myform()
>
> >> 21. return render.formtest(form) ...
>
> >> 22.
> >> 23. def POST(self):
> >> 24. form = myform()
> >> 25. if not form.validates():
> >> 26. return render.formtest(form)
> >> 27. else:
>
> >> ▶ Local vars
> >> Variable Value
> >> form
> >> <web.form.Form instance at 0x998346c>
> >> self
> >> <application.index instance at 0x998348c>
> >> # /usr/local/lib/python2.6/dist-packages/web/application.py in
> >> handle_class
>
> >> 379. def handle_class(cls):
> >> 380. meth = web.ctx.method
> >> 381. if meth == 'HEAD' and not hasattr(cls, meth):
> >> 382. meth = 'GET'
> >> 383. if not hasattr(cls, meth):
> >> 384. raise web.nomethod(cls)
> >> 385. tocall = getattr(cls(), meth)
>
> >> 386. return tocall(*args) ...
>
> >> 387.
> >> 388. def is_class(o): return isinstance(o, (types.ClassType, type))
> >> 389.
> >> 390. if f is None:
> >> 391. raise web.notfound()
> >> 392. elif isinstance(f, application):
>
> >> ▶ Local vars
> >> Variable Value
> >> args
> >> []
> >> cls
> >> <class application.index at 0x997f59c>
> >> meth
> >> u'GET'
> >> tocall
> >> <bound method index.GET of <application.index instance at 0x998348c>>
> >> # /usr/local/lib/python2.6/dist-packages/web/application.py in
> >> _delegate
>
> >> 404. elif '.' in f:
> >> 405. x = f.split('.')
> >> 406. mod, cls = '.'.join(x[:-1]), x[-1]
> >> 407. mod = __import__(mod, globals(), locals(), [""])
> >> 408. cls = getattr(mod, cls)
> >> 409. else:
> >> 410. cls = fvars[f]
>
> >> 411. return handle_class(cls) ...
>
> >> 412. elif hasattr(f, '__call__'):
> >> 413. return f()
> >> 414. else:
> >> 415. return web.notfound()
> >> 416.
> >> 417. def _match(self, mapping, value):
>
> >> # /usr/local/lib/python2.6/dist-packages/web/application.py in handle
>
> >> 225.
> >> 226. def browser(self):
> >> 227. import browser
> >> 228. return browser.AppBrowser(self)
> >> 229.
> >> 230. def handle(self):
> >> 231. fn, args = self._match(self.mapping, web.ctx.path)
>
> >> 232. return self._delegate(fn, self.fvars, args) ...
>
> >> 233.
> >> 234. def handle_with_processors(self):
> >> 235. def process(processors):
> >> 236. try:
> >> 237. if processors:
> >> 238. p, processors = processors[0], processors[1:]
>
> >> ▶ Local vars
> >> <web.application.application instance at 0x995ac8c>
> >> # /usr/local/lib/python2.6/dist-packages/web/application.py in process
>
> >> 234. def handle_with_processors(self):
> >> 235. def process(processors):
> >> 236. try:
> >> 237. if processors:
> >> 238. p, processors = processors[0], processors[1:]
> >> 239. return p(lambda: process(processors))
> >> 240. else:
>
> >> 241. return self.handle()
>
> --
> You received this message because you are subscribed to the Google Groups
> "web.py" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group
> athttp://groups.google.com/group/webpy?hl=en.
--
You received this message because you are subscribed to the Google Groups
"web.py" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/webpy?hl=en.