在Django中,为什么我需要__unicode__?
问题描述:
我开始学习Django,并开始使用Django书籍。 我碰到这个概念,我有一个很难理解的逻辑..在Django中,为什么我需要__unicode__?
书中说 “Django使用整个框架Unicode对象。模型对象作为Unicode对象检索,视图与Unicode数据和模板的互动都是以Unicode编码的,一般来说,你不必担心确保你的编码是正确的,事情应该是正常的。“
那么为什么你需要做“def unicode()”以unicode打印?它不应该只用普通香草印刷品()吗?
答
你看过https://docs.djangoproject.com/en/dev/ref/models/instances/#unicode吗?这解释了为什么我们需要unicod。由于python 2.x基本上不使用unicode,因此django需要处理unicode。
答
您是否试过打印没有__unicode__
方法的模型实例?你没有得到任何真正有用的东西。这就是__unicode__
进场的地方。您可以定义每当您尝试在unicode上下文中使用它们时,模型实例的显示方式。
试试这个实验。创建一个简单的模型。现在打印出来:
class MyModel(models.Model):
name = models.CharField(max_length=20)
>>> obj = MyModel("foo")
>>> print obj
看看你会得到什么。现在添加一个__unicode__()
方法。
class MyModel(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
运行一遍:
>>> obj = MyModel("foo")
>>> print obj
它的工作没有它,方法就是告诉它什么* *打印。 –
仅供参考:在Python 3中,您需要'__str__'来代替。 – meshy