Django模型中使用ugettext_lazy触发异常

Django模型中使用ugettext_lazy触发异常
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _

@python_2_unicode_compatible
class ProductType(ModelBaseObj):
    """ 生产产品类型"""
    name = models.CharField(_(u'产品类型'), max_length=64, unique=True)

    def __str__(self):
        return u'%s' % self.name

    class Meta:
        verbose_name = _(u'产品类型')
        verbose_name_plural = verbose_name

        db_table = u'basedata_product_type'
        app_label = _(u'basedata') # 此处不能使用惰性翻译

以下是报错信息

# ......
import_module
    __import__(name)
  File "/home/oee/oee/urls.py", line 22, in <module>
    url(r'^admin/', admin.site.urls),
  File "/home/venvs/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 280, in urls
    return self.get_urls(), 'admin', self.name
  File "/home/venvs/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 272, in get_urls
    regex = r'^(?P<app_label>' + '|'.join(valid_app_labels) + ')/$'
TypeError: sequence item 2: expected string or Unicode, __proxy__ found

判断是字符串拼接错误,问题产生原因如下:

标准Python字符串拼接(”.join([…]) ) 将不会工作在包括惰性翻译对象的列表上。 作为替代,你可以使用django.utils.translation.string_concat()

from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy

name = ugettext_lazy(u'John Lennon')
instrument = ugettext_lazy(u'guitar')
result = string_concat([name, ': ', instrument])

if __name__ == "__main__":
    print(result)

# >> [u'John Lennon', ': ', u'guitar']

猜你喜欢

转载自blog.csdn.net/soga238/article/details/80919546