【问题标题】:Django UnicodeEncodeError in errorlist错误列表中的 Django UnicodeEncodeError
【发布时间】:2012-04-26 11:41:20
【问题描述】:

如果我的错误列表项之一是 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'å') 引发UnicodeEncodeError。 force_unicode 和 lazy 不使用 smart_str 有充分的理由吗?我必须自己做,并以 str 对象而不是 unicode 的形式提供错误消息才能使其正常工作。

所以我得到 TemplateSyntaxError 在渲染时捕获 UnicodeEncodeError:'ascii' 编解码器无法在位置 17 编码字符 u'\xe5':序数不在范围内(128)。这似乎说明渲染我的错误列表项(即u'å')导致第一个 UnicodeEncodeError 具有 unicode 消息 'ascii' codec can't encode character u'\xe5' 然后第二个 UnicodeEncodeError 在渲染时来自第一个的消息。我弄错了吗?

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

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

【问题讨论】:

    标签: python django unicode


    【解决方案1】:

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

    【讨论】:

    • 谢谢!它适用于 smart_str。我只是想知道为什么在这种情况下我不能使用 unicode。
    猜你喜欢
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2021-11-21
    • 2011-01-03
    • 2015-09-16
    • 2018-03-14
    • 2016-06-16
    • 2015-12-04
    相关资源
    最近更新 更多