在Django中,为什么我需要__unicode__?

时间:2013-09-24 22:53:18

标签: python django

我开始学习Django,我开始学习Django书。 我遇到了这个概念,我很难理解逻辑......

这本书说 “Django在整个框架中使用Unicode对象。模型对象被检索为Unicode对象,视图与Unicode数据交互,模板呈现为Unicode。通常,您不必担心确保编码是正确的;事情应该只是工作。“

那为什么你需要用“def unicode ()”来打印unicode?不应该只使用普通香草印花()?

2 个答案:

答案 0 :(得分:4)

您是否尝试过打印没有__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

答案 1 :(得分:0)

您是否阅读过https://docs.djangoproject.com/en/dev/ref/models/instances/#unicode?它解释了为什么我们需要 unicod 。因为python 2.x基本上不使用unicode,所以django需要处理unicode。