我開始學習Django,並開始使用Django書籍。 我碰到這個概念,我有一個很難理解的邏輯..在Django中,爲什麼我需要__unicode__?
書中說 「Django使用整個框架Unicode對象。模型對象作爲Unicode對象檢索,視圖與Unicode數據和模板的互動都是以Unicode編碼的,一般來說,你不必擔心確保你的編碼是正確的,事情應該是正常的。「
那麼爲什麼你需要做「def unicode()」以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