У меня есть простая модель ввода новостей Django:
class NewsEntry(models.Model):
pub_date = models.DateTimeField('date published')
title = models.CharField(max_length = 200)
summary = models.TextField()
content = models.TextField()
def __unicode__(self):
return self.title
Добавление новых новостей (на странице администратора) с английским текстом работает нормально, но когда я пытаюсь добавить новости с русским текстом, возникает ошибка:
TemplateSyntaxError в / admin / news / newsentry /
Обнаружено DjangoUnicodeDecodeError при рендеринге: кодек «ascii» не может декодировать байт 0xd0 в позиции 0: порядковый номер не в диапазоне (128)Вы передали в NewsEntry: [Плохие данные Unicode] (класс 'antek.news.models.NewsEntry')
Версия Django: 1.2.2
Тип исключения: TemplateSyntaxError
Значение исключения: поймал DjangoUnicodeDecodeError при рендеринге: кодек «ascii» не может декодировать байт 0xd0 в позиции 0: порядковый номер не в диапазоне (128).Вы прошли в NewsEntry: [Плохие данные Unicode] (класс 'antek.news.models.NewsEntry')
Местоположение исключения: /usr/local/lib/python2.6/dist-packages/django/utils/encoding.py в> force_unicode, строка 88
Версия Python: 2.6.5
Последний элемент в списке отслеживания:
/ usr /local / lib / python2.6 / dist-packages / django / utils / encoding.py в force_unicode
Локальные переменные:
e: UnicodeDecodeError ('ascii', '\ xd0 \ xa2 \xd0 \ xb5 \ xd1 \ x81 \ xd1 \ x82 \ xd1 \ x80 \ xd1 \ x83 \ xd1 \ x81 \ xd1 \ x81 \ xd0 \ xba \ xd0 \ xbe \ xd0 \ xb3 \ xd0 \ xbe ', 0, 1,'порядковый номер не в диапазоне (128) ')
Код выглядит правильно: self.title - это объект Unicode.Кроме того, djangoproject.com использует подобный код в своем блог-приложении .
Я трачу много времени на решение этой проблемы и нашел странное решение:
from django.utils.encoding import force_unicode
# ...
def __unicode__(self):
return force_unicode(self.title)
Но из-заself.title - это объект Unicode, force_unicode должен вернуть его без изменений.
Почему return self.title
не работает?