Hi Thomas,
You seem read my email too quickly. I do use u'å'. In force_unicode() and
lazy() Django runs str(u'å') which results in the exception(s). If it would
use smart_str instead, the exception would not happen. Am I missing
something?
Andrei
On Friday, April 27, 2012 9:11:19 AM UTC+2, guettli wrote:
>
>
> You need to use u'å' not 'å' in your python code.
>
>
smart_str() creates a bytestring, but in Django everything is unicode until
> the end. Only one of the last
> steps is to encode the unicode result to (most of the times) utf8.
>
>
> Am 26.04.2012 20:41, schrieb Andrei:
> > Hi,
> >
> > I am having an issue with rendering Django's ErrorList if one of my
> error list items is unicode. When Django renders my
> > errorlist
> >
> > |{{ form.non_field_errors}}
> > |
> >
> > it runs the following code <
> https://github.com/django/django/blob/1.3.1/django/forms/util.py#L46>:
> >
> > |class ErrorList(list, StrAndUnicode):
> > """
> > A collection of errors that knows how to display itself in
> various formats.
> > """
> > def __unicode__(self):
> > return self.as_ul()
> >
> > def as_ul(self):
> > if not self: return u''
> > return mark_safe(u'<ul class="errorlist">%s</ul>'
> > % ''.join([u'<li>%s</li>' %
> conditional_escape(force_unicode(e)) for ein self]))
> > |
> >
> > then in |force_unicode| <
> https://github.com/django/django/blob/1.3.1/django/utils/encoding.py#L74>:
>
> >
> > |s= unicode(str(s), encoding, errors)
> > |
> >
> > and then translation in |lazy| <
> https://github.com/django/django/blob/1.3.1/django/utils/functional.py#L209>:
>
> >
> > |def __str_cast(self):
> > return str(self.__func(*self.__args, **self.__kw))
> > |
> >
> > The problem is that my string contains 'å' symbol and |str(u'å')| raises
> |UnicodeEncodeError|. Is there a good reason
> > why |force_unicode| and |lazy| do not use |smart_str|? I have to do it
> myself and provide error messages as |str|
> > objects instead of unicode to make it work.
> >
> > So I get TemplateSyntaxError /Caught UnicodeEncodeError while rendering:
> 'ascii' codec can't encode character u'\xe5' in
> > position 17: ordinal not in range(128)/. This seems telling that
> rendering my error list item (which is |u'å'|) caused
> > the first UnicodeEncodeError having unicode message /'ascii' codec can't
> encode character u'\xe5'/ and then second
> > UnicodeEncodeError while rendering the message from the first one. Am I
> mistaken?
> >
> > Django version: 1.3.1 (but this seems to happen in 1.4 as well)
> >
> > Full traceback:
> https://raw.github.com/gist/2499077/ba60cb752acdb429dd6c2814ffb24272037a367a/UnicodeEncodeError.txt
>
> >
> > Thanks,
> >
> > Andrei
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "Django developers" group.
> > To view this discussion on the web visit
> https://groups.google.com/d/msg/django-developers/-/pYaefZxhll4J.
> > 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/django-developers?hl=en.
>
> --
> Thomas Guettler, http://www.thomas-guettler.de/
> E-Mail <http://www.thomas-guettler.de/E-Mail>: guettli (*)
> thomas-guettler + de
>
On Friday, April 27, 2012 9:11:19 AM UTC+2, guettli wrote:
>
> this question belongs to django-user.
>
> You need to use u'å' not 'å' in your python code.
>
> > Is there a good reason
> > why |force_unicode| and |lazy| do not use |smart_str|?
>
> smart_str() creates a bytestring, but in Django everything is unicode
> until the end. Only one of the last
> steps is to encode the unicode result to (most of the times) utf8.
>
> I have seem a lot of unicode errors in django. But most of them were fixed
> long ago.
>
> The last (I know of): https://code.djangoproject.com/ticket/18063
> "repr() should return only ascii, not unicode"
>
> Thomas
>
> Am 26.04.2012 20:41, schrieb Andrei:
> > Hi,
> >
> > I am having an issue with rendering Django's ErrorList if one of my
> error list items is unicode. When Django renders my
> > errorlist
> >
> > |{{ form.non_field_errors}}
> > |
> >
> > it runs the following code <
> https://github.com/django/django/blob/1.3.1/django/forms/util.py#L46>:
> >
> > |class ErrorList(list, StrAndUnicode):
> > """
> > A collection of errors that knows how to display itself in
> various formats.
> > """
> > def __unicode__(self):
> > return self.as_ul()
> >
> > def as_ul(self):
> > if not self: return u''
> > return mark_safe(u'<ul class="errorlist">%s</ul>'
> > % ''.join([u'<li>%s</li>' %
> conditional_escape(force_unicode(e)) for ein self]))
> > |
> >
> > then in |force_unicode| <
> https://github.com/django/django/blob/1.3.1/django/utils/encoding.py#L74>:
>
> >
> > |s= unicode(str(s), encoding, errors)
> > |
> >
> > and then translation in |lazy| <
> https://github.com/django/django/blob/1.3.1/django/utils/functional.py#L209>:
>
> >
> > |def __str_cast(self):
> > return str(self.__func(*self.__args, **self.__kw))
> > |
> >
> > The problem is that my string contains 'å' symbol and |str(u'å')| raises
> |UnicodeEncodeError|. Is there a good reason
> > why |force_unicode| and |lazy| do not use |smart_str|? I have to do it
> myself and provide error messages as |str|
> > objects instead of unicode to make it work.
> >
> > So I get TemplateSyntaxError /Caught UnicodeEncodeError while rendering:
> 'ascii' codec can't encode character u'\xe5' in
> > position 17: ordinal not in range(128)/. This seems telling that
> rendering my error list item (which is |u'å'|) caused
> > the first UnicodeEncodeError having unicode message /'ascii' codec can't
> encode character u'\xe5'/ and then second
> > UnicodeEncodeError while rendering the message from the first one. Am I
> mistaken?
> >
> > Django version: 1.3.1 (but this seems to happen in 1.4 as well)
> >
> > Full traceback:
> https://raw.github.com/gist/2499077/ba60cb752acdb429dd6c2814ffb24272037a367a/UnicodeEncodeError.txt
>
> >
> > Thanks,
> >
> > Andrei
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "Django developers" group.
> > To view this discussion on the web visit
> https://groups.google.com/d/msg/django-developers/-/pYaefZxhll4J.
> > 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/django-developers?hl=en.
>
> --
> Thomas Guettler, http://www.thomas-guettler.de/
> E-Mail <http://www.thomas-guettler.de/E-Mail>: guettli (*)
> thomas-guettler + de
>
On Friday, April 27, 2012 9:11:19 AM UTC+2, guettli wrote:
>
> this question belongs to django-user.
>
> You need to use u'å' not 'å' in your python code.
>
> > Is there a good reason
> > why |force_unicode| and |lazy| do not use |smart_str|?
>
> smart_str() creates a bytestring, but in Django everything is unicode
> until the end. Only one of the last
> steps is to encode the unicode result to (most of the times) utf8.
>
> I have seem a lot of unicode errors in django. But most of them were fixed
> long ago.
>
> The last (I know of): https://code.djangoproject.com/ticket/18063
> "repr() should return only ascii, not unicode"
>
> Thomas
>
> Am 26.04.2012 20:41, schrieb Andrei:
> > Hi,
> >
> > I am having an issue with rendering Django's ErrorList if one of my
> error list items is unicode. When Django renders my
> > errorlist
> >
> > |{{ form.non_field_errors}}
> > |
> >
> > it runs the following code <
> https://github.com/django/django/blob/1.3.1/django/forms/util.py#L46>:
> >
> > |class ErrorList(list, StrAndUnicode):
> > """
> > A collection of errors that knows how to display itself in
> various formats.
> > """
> > def __unicode__(self):
> > return self.as_ul()
> >
> > def as_ul(self):
> > if not self: return u''
> > return mark_safe(u'<ul class="errorlist">%s</ul>'
> > % ''.join([u'<li>%s</li>' %
> conditional_escape(force_unicode(e)) for ein self]))
> > |
> >
> > then in |force_unicode| <
> https://github.com/django/django/blob/1.3.1/django/utils/encoding.py#L74>:
>
> >
> > |s= unicode(str(s), encoding, errors)
> > |
> >
> > and then translation in |lazy| <
> https://github.com/django/django/blob/1.3.1/django/utils/functional.py#L209>:
>
> >
> > |def __str_cast(self):
> > return str(self.__func(*self.__args, **self.__kw))
> > |
> >
> > The problem is that my string contains 'å' symbol and |str(u'å')| raises
> |UnicodeEncodeError|. Is there a good reason
> > why |force_unicode| and |lazy| do not use |smart_str|? I have to do it
> myself and provide error messages as |str|
> > objects instead of unicode to make it work.
> >
> > So I get TemplateSyntaxError /Caught UnicodeEncodeError while rendering:
> 'ascii' codec can't encode character u'\xe5' in
> > position 17: ordinal not in range(128)/. This seems telling that
> rendering my error list item (which is |u'å'|) caused
> > the first UnicodeEncodeError having unicode message /'ascii' codec can't
> encode character u'\xe5'/ and then second
> > UnicodeEncodeError while rendering the message from the first one. Am I
> mistaken?
> >
> > Django version: 1.3.1 (but this seems to happen in 1.4 as well)
> >
> > Full traceback:
> https://raw.github.com/gist/2499077/ba60cb752acdb429dd6c2814ffb24272037a367a/UnicodeEncodeError.txt
>
> >
> > Thanks,
> >
> > Andrei
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "Django developers" group.
> > To view this discussion on the web visit
> https://groups.google.com/d/msg/django-developers/-/pYaefZxhll4J.
> > 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/django-developers?hl=en.
>
> --
> Thomas Guettler, http://www.thomas-guettler.de/
> E-Mail <http://www.thomas-guettler.de/E-Mail>: guettli (*)
> thomas-guettler + de
>
--
You received this message because you are subscribed to the Google Groups
"Django developers" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/django-developers/-/UuX-O1GUiE8J.
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/django-developers?hl=en.