I have following code in my django application.
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"))
When I try to display some status (or even coerce it to unicode), I get:
TypeError: coercing to Unicode: need string or buffer, __proxy__ found
Could anyone explain me, what I am doing wrong?
The _()
function from Django can return a django.utils.functional.__proxy__
object, which is itself not unicode (see http://docs.djangoproject.com/en/1.1/ref/unicode/#translated-strings). Python does not call unicode()
recursively, so it's an error for your Status object to return the __proxy__
object directly. You need to make the __unicode__
method return unicode(self.desc)
.
Note that this is specific to Django; Python's own gettext
doesn't return these proxy objects.
I assume that @thomas-wounters solved your issue, but for others who might have a similar issue - please check if you are not using ugettext_lazy
:
from django.utils.translation import ugettext_lazy as _
in that case, you must cast output to str/unicode:
unicode(_('translate me'))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With