如何阻止Django模板render_to_string尝试将unicode编码为ascii?

时间:2013-04-17 15:05:05

标签: django encoding django-models django-templates ascii

我有一个模型“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,还是有一些更合适的方法可以防止出现此错误?

3 个答案:

答案 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}}