2010-02-25 5 views
0

code:modèle .__ unicode __() retour de cause chaîne russe 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 

erreur:

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

que dois-je faire?

Répondre

1

Essayez

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

Ceci est le numéro un erreur Django que je vois. Règle générale: '__unicode__' doit toujours renvoyer unicode. –

0

Parce que self.title est une chaîne unicode et n'est pas votre chaîne littérale (son type est str), lorsque Python exécute l'expression 'Галерея %s' % self.title, il doit forcer la chaîne littérale en unicode avant effectuer l'interpolation. Il a besoin d'un encodage de caractères pour cela, et utilise par défaut ASCII, qui peut encoder moins de 128 caractères différents.

Pour éviter ce problème, utilisez un littéral de chaîne unicode: u'Галерея %s'. En cas de doute, vos chaînes doivent être des chaînes Unicode, en particulier dans Django.

0

pour éviter des erreurs comme ça, mettez-le au début de votre fichier

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