Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中的Unicode问题_Django_Unicode_Unicode String - Fatal编程技术网

Django中的Unicode问题

Django中的Unicode问题,django,unicode,unicode-string,Django,Unicode,Unicode String,我似乎对交易模型中的deal\u实例\u name有unicode问题 它说: 强制使用Unicode:需要字符串或缓冲区,已找到代理 此行出现异常: return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.') + str(self.set) 如果我删除smart\u unicode(self.deal\u type.deal\u name),这行代码就行了,但为什么呢 当时在Django 1.1中,有人也遇到了同样的问

我似乎对交易模型中的
deal\u实例\u name
有unicode问题

它说:

强制使用Unicode:需要字符串或缓冲区,已找到代理

此行出现异常:

return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.')  + str(self.set)
如果我删除
smart\u unicode(self.deal\u type.deal\u name)
,这行代码就行了,但为什么呢

当时在Django 1.1中,有人也遇到了同样的问题,我尝试了
unicode()
以及新的
smart\u unicode()
,但没有任何乐趣

请问我会错过什么

class Deal(models.Model):
    def __init__(self, *args, **kwargs):
        super(Deal, self).__init__(*args, **kwargs)      
        self.deal_instance_name = self.__unicode__()      

    deal_type           = models.ForeignKey(DealType)
    deal_instance_name  = models.CharField(_(u'Deal Name'), max_length=100)    
    set                 = models.IntegerField(_(u'Set Number'))

    def __unicode__(self):
        return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.')  + smart_unicode(self.set)

    class Meta:
        verbose_name = _(u'Deal')
        verbose_name_plural = _(u'Deals')
交易类型:

class DealType(models.Model):    
    deal_name           = models.CharField(_(u'Deal Name'), max_length=40)
    deal_description    = models.TextField(_(u'Deal Description'),     blank=True)

    def __unicode__(self):
        return smart_unicode(self.deal_name) 

    class Meta:
        verbose_name = _(u'Deal Type')
        verbose_name_plural = _(u'Deal Types')

实际上,
smart\u unicode
部分与您的问题无关:

from django.utils.translation import ugettext_lazy
stuff = u'abc' + ugettext_lazy(u'efg')
会引发完全相同的问题

这基本上是因为
ugettext\u lazy(u'efg')
不会返回
unicode
字符串,而是返回
\uuuuuuu proxy\uuuu
,当您执行
u'abc'+ugettext\u lazy(u'eg')
时,这将引发一个错误

你会遇到同样的问题:
u'a'+1

您可以使用以下方法解决此问题:

from django.utils.translation import ugettext_lazy
stuff = u'abc {0}'.format(ugettext_lazy(u'efg'))

或者,您可以使用
unicode(ugettext\u lazy(u'efg'))
ugettext\u lazy(u'efg')
强制到
unicode
对象中。所以我这样做是为了返回
\uuuunicode()\uuuuu
,对吗?@Kave是的,将
智能uunicode(self.deal\u type.deal\u name)+(u'-Set No.)+smart\uunicode(self.Set)
替换为
u'{0}{1}{2}'。格式(self deal.deal\u类型.deal\u名称,{u'-Set编号,'.self code>完美。我按照你的建议解决了,这也行吗?似乎正在工作:
返回u“%s%s%s%”(self.deal\u type.deal\u name、u(u'-Set No.)、self.Set)
@Kave是的,它也能工作!(但您应该在较新的代码中使用
str.format
))啊,谢谢您的更正。我从Django 1.0的旧书中学习了Django/Python: