【问题标题】:`__unicode__()` addition not working in basic poll application in Django tutorial`__unicode__()` 添加在 Django 教程中的基本投票应用程序中不起作用
【发布时间】:2012-11-13 08:00:56
【问题描述】:

在从源代码安装了 Django 的开发源代码以及 PostgreSQL 以及从源代码需要的所有其他内容之后,我正在完成 Django 教程。我正在尝试在 Ubuntu 12.10 上使用 python3 而不是 python 来做所有事情。

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

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

【问题讨论】:

  • 你应该知道 Python3 还没有在 Django 中得到正式支持。
  • 1.6 版将正式支持 python3,我使用的是 1.6 alpha。

标签: django


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我认为这可能更多,因为一年多前人们遇到了同样的问题,没有人正确回答他们的问题(这是在 django 用户的谷歌群组上)。不过,如果教程为 python3 的差异添加了 cmets,那就太好了。
猜你喜欢
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2022-12-17
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 2013-04-13
相关资源
最近更新 更多