错误列表中的Django UnicodeEncodeError

时间:2012-04-26 11:41:21

标签: python django unicode

如果我的错误列表项之一是unicode,我遇到渲染Django的ErrorList的问题。当Django呈现我的错误列表

{{ form.non_field_errors }}

it runs the following code

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])) 

然后在force_unicode

s = unicode(str(s), encoding, errors) 

然后翻译lazy

def __str_cast(self):
    return str(self.__func(*self.__args, **self.__kw))

问题是我的字符串包含'å'符号而str(u'å')引发UnicodeEncodeErrorforce_unicodelazy不使用smart_str的原因是否充分?我必须自己做,并提供错误消息作为str对象而不是unicode,以使其工作。

所以我在渲染时得到了TemplateSyntaxError Caught UnicodeEncodeError:'ascii'编解码器无法编码位置17的字符u'\ xe5':序号不在范围内(128)。这似乎告诉我渲染我的错误列表项(u'å')导致第一个UnicodeEncodeError具有unicode消息'ascii'编解码器无法编码字符u'\ xe5'然后编码第二个UnicodeEncodeError从第一个渲染消息时。我错了吗?

Django版本:1.3.1(但这似乎也发生在1.4中)

完整追溯:https://raw.github.com/gist/2499077/ba60cb752acdb429dd6c2814ffb24272037a367a/UnicodeEncodeError.txt

1 个答案:

答案 0 :(得分:0)

您可以使用包含标记或non_field_errors手动呈现{% include %}(以及整个表单)。这不是直接的解决方案,但它解决了问题,而且更加灵活。