model .__ unicode __()返回俄语字符串导致TemplateSyntaxError

时间:2010-02-25 15:33:24

标签: python django unicode ascii

代码:

class Gallery(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    created = models.DateField(auto_now_add=True)    
    class Meta:
        verbose_name = 'галерея'
        verbose_name_plural = 'галереи'
    def __unicode__(self):
        return 'Галерея %s' % self.title

错误:

TemplateSyntaxError at /admin/galleries/gallery/
Caught an exception while rendering: ('ascii', '\xd0\x93\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x80\xd0\xb5\xd1\x8f ', 0, 1, 'ordinal not in range(128)')

我该怎么办?

3 个答案:

答案 0 :(得分:1)

尝试

return u'Галерея %s' % self.title

答案 1 :(得分:0)

因为self.title是一个unicode字符串而你的字符串文字不是(它的类型是str),所以当Python执行表达式'Галерея %s' % self.title时,它需要在执行插值之前将字符串文字强制转换为unicode。它需要一个字符编码来执行此操作,默认情况下会转换为ASCII,它可以编码少于128个不同的字符。

要避免此问题,请使用unicode字符串文字:u'Галерея %s'。如果有疑问,你的字符串应该是unicode字符串,尤其是在Django中。

答案 2 :(得分:0)

为了避免这样的错误,请将其放在文件的开头

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