2010-01-25 16 views
6

मेरे पास मेरे django एप्लिकेशन में निम्न कोड है।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")) 

जब मैं कुछ स्थिति प्रदर्शित (या यहां तक ​​कि यूनिकोड को यह विवश) करने की कोशिश, मैं मिलता है:

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) बनाने की आवश्यकता है।

ध्यान दें कि यह Django के लिए विशिष्ट है; पायथन का अपना gettext इन प्रॉक्सी ऑब्जेक्ट्स को वापस नहीं करता है।

+0

आपको बहुत धन्यवाद, यही वही है जो मुझे चाहिए। – gruszczy

0

मुझे लगता है कि @ थॉमस-wounters आपकी समस्या हल हो, लेकिन दूसरों के लिए जो एक समान मुद्दा हो सकता है - कृपया देखें कि क्या आप ugettext_lazy उपयोग नहीं कर रहे:

from django.utils.translation import ugettext_lazy as _ 
उस मामले में

, आप के लिए उत्पादन कास्ट करना होगा str/unicode:

unicode(_('translate me')) 
संबंधित मुद्दे