Django教程中基本投票应用程序中的`__unicode __()`添加无效。

6

我安装了Django的开发源码以及来自源码的PostgreSQL和其他必要的内容,正在完成Django教程。我正在尝试在Ubuntu 12.10上使用python3而不是python进行所有操作。

一切似乎都很顺利,直到我遇到了教程中我们应该重新定义__unicode__()以便在从表中请求objects.all()时返回合理的结果的部分。它根本不起作用。我决定尝试__str__(),它成功了!

但是,教程解释说我们不应该重新定义__str__()。那么,为什么我的安装会导致__unicode__()无法工作,而__str__()可以?教程中的其他方法都能正常工作。


你需要了解的是,Django目前还没有正式支持Python3。 - Daniel Roseman
版本1.6将正式支持Python3,而我正在使用1.6 alpha版。 - Colin Keenan
1个回答

8

Python3和Python2中处理字符串的方式不同。

在Python2中,__str__()返回bytes,而__unicode__()返回字符。在Python3中,由于字符串现在本地支持unicode,__str__()现在返回字符,而__unicode__()不存在。如果您确实需要使用Python2中旧版本的__str__()语法,则可以使用__bytes__()

简而言之,在Python3中使用__str__()即可,并且请注意,Django教程明确指出是针对2.x编写的,因此会有区别。


1
谢谢!我以为问题会更复杂,因为一年前有人遇到了同样的问题,但没有得到正确的答案(这是在 Django 用户的 Google 群组上)。如果教程能够添加关于 Python3 差异的注释就好了。 - Colin Keenan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接