0

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

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

然后在force_unicode

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

然后翻译成lazy

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

问题是我的字符串包含 'å' 符号和str(u'å')raises UnicodeEncodeError。是否有充分的理由force_unicodelazy使用smart_str?我必须自己做,并以str对象而不是 unicode 的形式提供错误消息才能使其工作。

所以我得到 TemplateSyntaxError Caught UnicodeEncodeError while rendering: 'ascii' codec can't encode character u'\xe5' in position 17: ordinal not in range(128)。这似乎说明渲染我的错误列表项(即u'å')导致第一个 UnicodeEncodeError 具有 unicode 消息'ascii' 编解码器无法编码字符 u'\xe5',然后是第二个 UnicodeEncodeError ,同时从第一个渲染消息。我弄错了吗?

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

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

4

1 回答 1

0

您可以non_field_errors使用包含标记或{% include %}. 它不是直接的解决方案,但它解决了问题并且更灵活。

于 2012-04-26T11:56:22.107 回答