2010-01-25 3 views
6

내 장고 응용 프로그램에 다음 코드가 있습니다.django : gettext 및 유니 코드로 강제 변환

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

내가 어떤 상태를 표시 (또는 유니 코드로 강제)하려고, 내가 얻을 :

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

사람이 나를 설명 할 수 있을까요, 내가 무슨 일을하고 있는가?

답변

21

Django의 _() 함수는 django.utils.functional.__proxy__ 개체를 반환 할 수 있습니다.이 개체는 유니 코드가 아닙니다 (http://docs.djangoproject.com/en/1.1/ref/unicode/#translated-strings 참조). 파이썬은 unicode()을 재귀 적으로 호출하지 않으므로 상태 객체가 __proxy__ 객체를 직접 반환하는 것은 오류입니다. __unicode__ 방법을 return unicode(self.desc)으로 만들어야합니다.

이것은 장고에만 해당됩니다. 파이썬 자신의 gettext은 이러한 프록시 객체를 반환하지 않습니다.

+0

대단히 감사합니다. – gruszczy

0

나는 @ 토마스 - wounters이 문제를 해결한다고 가정하지만, 다른 사람을 위해 누가 비슷한 문제가있을 수 있습니다 - 확인하십시오 당신이 ugettext_lazy을 사용하지 않는 경우 :

이 경우에
from django.utils.translation import ugettext_lazy as _ 

, 당신은 출력을 캐스팅해야한다 str/유니 코드 :

unicode(_('translate me')) 
관련 문제