Спасибо за ответ. Я как раз так и сделала.

On 30 April 2010 21:27, andrei <[email protected]> wrote:
> #coding: utf-8
>
>
> form = form.Form(
>    form.Textbox("surname", description="Фамилия"),
> )
>
> Потому что id инпута выводится без net.websafe(), ведь оно всё равно
> должно быть латинскими буквами.
>
> Because input's id isn't wrapped in net.websafe(), why would you need
> non-Latin id?
>
> 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.
>
>

-- 
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.

Reply via email to