`__unicode __()`另外在Django教程的基本轮询应用程序中不起作用

时间:2012-11-13 08:00:56

标签: django

在安装了Django的开发源以及源码中的PostgreSQL以及源码所需的一切之后,我正在完成Django教程。我想在Ubuntu 12.10上用python3而不是python做一切。

在我进入教程中我们应该重新定义__unicode__()以便在我们从表中请求objects.all()时返回合理结果时,一切似乎都进展顺利。它根本不起作用。我决定尝试__str__(),它有效!

但是,教程解释说我们不应该重新定义__str__()。那么,__unicode__()__str__()执行时{{1}}不起作用的安装有什么问题?本教程中的其他方法工作正常。

1 个答案:

答案 0 :(得分:8)

在Python 3 vs 2中,字符串的处理方式不同。

在2中,__str__()返回字节,而__unicode__()返回字符。在3中,__str__()现在返回字符,因为字符串现在是本机unicode,并且__unicode__()不存在。如果你真的需要__str__()的旧2行为,我相信它现在是__bytes__()

简短回答,如果您使用的是Python 3,请坚持使用__str__(),并意识到Django教程明确指出它们是针对2.x编写的,因此会有差异。