2010-01-25 4 views
6

Tengo el siguiente código en mi aplicación django.django: gettext y coercing a unicode

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

Cuando trato de mostrar algún estado (o incluso coaccionar a Unicode), me sale:

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

¿Alguien podría explicar, lo que estoy haciendo mal?

Respuesta

21

La función _() de Django puede devolver un objeto django.utils.functional.__proxy__, que a su vez no es unicode (consulte http://docs.djangoproject.com/en/1.1/ref/unicode/#translated-strings). Python no llama al unicode() de forma recursiva, por lo que es un error que el objeto Status devuelva el objeto __proxy__ directamente. Debe realizar el método __unicode__return unicode(self.desc).

Tenga en cuenta que esto es específico de Django; El propio gettext de Python no devuelve estos objetos proxy.

+0

Muchas gracias, eso es exactamente lo que necesitaba. – gruszczy

0

que asumir que @ Thomas-wounters resuelven su problema, pero para otras personas que puedan tener un problema similar - por favor compruebe que no está utilizando ugettext_lazy:

from django.utils.translation import ugettext_lazy as _ 

en ese caso, debe convertir la salida a str/unicode:

unicode(_('translate me'))