{{ form.non_field_errors }}
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 e in self]))
then in force_unicode
:
s = unicode(str(s), encoding, errors)
and then translation in lazy
:
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