2

次の属性を持つモデル「イベント」があります。

desc = models.TextField(blank=True, null=True)

モデルのインスタンスを保存すると、左の二重引用符が「\u201c」になるなど、特殊文字が Unicode に変換されるようです。後で、テンプレートで {{ event.desc }} を参照します (問題なく動作します) が、テンプレートを文字列にレンダリングすると、「UnicodeEncodeError」が発生します。コンテキストとして、API に投稿するために、単純な HTML を文字列にレンダリングしようとしています。

テンプレートのレンダリング方法:

description = render_to_string('event_description.html', {'event': self})

結果のエラー:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 845: ordinal not in range(128)

render_to_string が ascii にエンコードされないようにする方法、またはこのエラーを防ぐより適切な方法はありますか?

4

3 に答える 3

3

をASCII.encode()にエンコードしようとして失敗した場所があるようです。 トレースバックをチェックして行を見つけ、それを explicit に変更することができます。 または、Python システムのデフォルトのエンコーディングを 'utf-8': ref here & hereに変更します。u'\u201c'
.encode('utf8')

于 2013-04-17T16:20:01.057 に答える
0

ビューで使用してみてください:

# -*- coding: utf-8 -*-

よろしく、

于 2013-04-17T17:39:29.710 に答える
0

まったく同じ問題が私に起こりました。このエラーが発生していました:

'ascii' codec can't encode character u'\xf5' in position 14: ordinal not in range(128)
(...)
Error during template rendering
(...)
<h1 id="site-name">{{ servidor }}</h1>

私の場合、それはあなたのものと同じかもしれないし、そうでないかもしれません (それを確認するのに十分な詳細が質問にありません)、「servidor」はオブジェクトでした。Django は暗黙的に文字列に変換しようとしましたが、間違ったエンコーディングを使用していました。これは、「nome_servidor」という名前のコンテキストに新しいパラメーターを作成し、事前に明示的にエンコードすることで解決されました。

context = {
    'nome_servidor': unicode(servidor),
    'servidor': servidor,
    'logs' : servidor.lista_logs()  
}

次に、エンコードされた文字列を明示的に使用するようにテンプレートを変更します。

<h1 id="site-name">{{ nome_servidor }}</h1>
于 2016-02-01T16:37:29.860 に答える