我有一个模型“Event”,具有以下属性:
desc = models.TextField(blank=True, null=True)
当保存模型的实例时,它似乎将特殊字符转换为unicode,例如左侧双引号变为“\ u201c”。稍后,我在模板中引用{{event.desc}}(工作正常),但是当我将模板渲染为字符串时,我得到一个“UnicodeEncodeError”。对于上下文,我试图将一个简单的HTML呈现为一个字符串,以便发布到API。
我如何渲染模板:
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,还是有一些更合适的方法可以防止出现此错误?
答案 0 :(得分:3)
听起来有一个.encode()
某处试图将u'\u201c'
编码为ascii并失败。
您可以检查回溯以找到该行并将其更改为显式.encode('utf8')
或者将Python系统的默认编码更改为“utf-8”:ref here& here
答案 1 :(得分:1)
尝试在您的视图中使用:
# -*- coding: utf-8 -*-
此致
答案 2 :(得分:0)
同样的问题刚好发生在我身上;我收到了这个错误:
context = {
'nome_servidor': unicode(servidor),
'servidor': servidor,
'logs' : servidor.lista_logs()
}
在我的情况下,可能与你的相同或不同(关于这个问题没有足够的细节可以确定),那个'服务'是一个对象; Django试图将其转换为字符串,但使用了错误的编码;这是通过为名为'nome_servidor'的上下文创建一个新参数,并事先明确编码来解决的:
<h1 id="site-name">{{ nome_servidor }}</h1>
然后更改模板以显式使用编码的字符串:
{{1}}