0

エラー リスト項目の 1 つが 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'å')問題は、私の文字列に「 å 」記号が含まれており、UnicodeEncodeError. を使用しない正当な理由はありforce_unicodeますか? 私はそれを自分で行い、エラーメッセージをユニコードではなくオブジェクトとして提供して機能させる必要があります。lazysmart_strstr

したがって、レンダリング中に TemplateSyntaxError Caught UnicodeEncodeError が発生します: 'ascii' codec can't encode character u'\xe5' in position 17: ordinal not in range(128)。これは、エラー リスト アイテム (これはu'å') をレンダリングすると、最初の UnicodeEncodeError が発生し、Unicode メッセージ'ascii' コーデックは文字 u'\xe5'をエンコードできず、次に最初のメッセージのレンダリング中に 2 番目の UnicodeEncodeError が発生したことを示しているようです。私は間違っていますか?

Django バージョン: 1.3.1 (ただし、これは 1.4 でも発生するようです)

完全なトレースバック: https://raw.github.com/gist/2499077/ba60cb752acdb429dd6c2814ffb24272037a367a/UnicodeEncodeError.txt

4

1 に答える 1

0

non_field_errorsinsclusion タグまたは を使用して、(およびフォーム全体を) 手動でレンダリングできます{% include %}。直接的な解決策ではありませんが、問題を解決し、とにかくより柔軟です。

于 2012-04-26T11:56:22.107 に答える