Django: gettext и принуждение к Unicode - PullRequest
7 голосов
/ 25 января 2010

У меня есть следующий код в моем приложении django.

class Status(object):

    def __init__(self, id, desc):
        self.id = id
        self.desc = desc

    def __unicode__(self):
        return self.desc

STATUS = Status(0, _(u"Some text"))

Когда я пытаюсь отобразить какой-либо статус (или даже принудительно привести его к Unicode), я получаю:

TypeError: coercing to Unicode: need string or buffer, __proxy__ found

Может ли кто-нибудь объяснить мне, что я делаю неправильно?

Ответы [ 2 ]

22 голосов
/ 25 января 2010

Функция _() из Django может вернуть объект django.utils.functional.__proxy__, который сам по себе не является юникодом (см. http://docs.djangoproject.com/en/1.1/ref/unicode/#translated-strings). Python не вызывает рекурсивно unicode(), поэтому ваш объект Status возвращает ошибку объект __proxy__ напрямую. Вам необходимо создать метод __unicode__ return unicode(self.desc).

Обратите внимание, что это характерно для Джанго; Собственный Python gettext не возвращает эти прокси-объекты.

1 голос
/ 07 февраля 2018

Я предполагаю, что @ thomas-wounters решил вашу проблему, но для тех, у кого может быть похожая проблема - проверьте, не используете ли вы ugettext_lazy:

from django.utils.translation import ugettext_lazy as _

в этом случае вы должны привести вывод к str / unicode:

unicode(_('translate me'))
...