7

我的 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

谁能解释我,我做错了什么?

4

2 回答 2

22

_()来自 Django的函数可以返回一个django.utils.functional.__proxy__对象,该对象本身不是 unicode(参见http://docs.djangoproject.com/en/1.1/ref/unicode/#translated-strings)。Python 不会unicode()递归调用,因此您的 Status 对象__proxy__直接返回该对象是错误的。你需要制作__unicode__方法return unicode(self.desc)

请注意,这是特定于 Django 的;Python 自己的gettext不会返回这些代理对象。

于 2010-01-25T16:20:00.287 回答
1

我认为@thomas-wounters 解决了您的问题,但对于可能有类似问题的其他人 - 请检查您是否没有使用ugettext_lazy

from django.utils.translation import ugettext_lazy as _

在这种情况下,您必须将输出转换为 str/unicode:

unicode(_('translate me'))
于 2018-02-06T21:27:54.657 回答