2010-02-25 59 views
0

代碼:模型.__的unicode __()返回俄羅斯字符串原因TemplateSyntaxError

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)') 

我該怎麼辦?

回答

1

嘗試

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

這是頭號Django的錯誤我看到的開始。經驗法則:'__unicode__'必須*總是*返回unicode。 – 2010-02-25 16:02:35

0

因爲self.title是unicode字符串和你的字符串字面量不是(它的類型是STR),當Python的執行表達'Галерея %s' % self.title,它需要之前強制字符串文字轉換爲Unicode執行插值。它需要一個字符編碼來完成,默認情況下使用ASCII碼,它可以編碼少於128個不同的字符。

要避免此問題,請使用unicode字符串文字:u'Галерея %s'。如果有疑問,你的字符串應該是unicode字符串,尤其是在Django中。

0

,以避免象這樣的錯誤,把它放在你的文件

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