Python与Unicode
我正在通过Django官网的教程学习Django,但遇到了一个奇怪的问题。在这个步骤中,当我输入unicode代码片段时,
>>> Poll.objects.all()
应该返回的结果不是这个
[<Poll: Poll object>]
而是像这样的东西
[<Poll: What's up?>]
但不知为什么,代码只有在我复制粘贴的时候才有效,而自己输入却不行。有没有人知道这是为什么呢?
::
这是在评论中无法格式化的代码:
from django.db import models
import datetime
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def was_published_today(self):
return self.pub_date.date() ==datetime.date.today()
def __unicode__(self):
return self.question
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return self.choice
2 个回答
1
如果你在用TextMate这个编辑器,记得把“软制表符”设置为4,然后使用“清理空白字符”这个命令。这样做对我有用!
1
这可能是因为你在缩进时混用了制表符和空格...
你在评论中粘贴的代码格式有点乱,不过我查看了HTML源代码,发现你输入的那些行(特别是关于__unicode__
方法的部分)使用了混合的制表符和空格来缩进。也许你在使用的编辑器里把“制表符宽度”设置成了4,这样制表符的缩进看起来就和4个空格一样。但实际上,Python解释器把一个制表符当作8个空格(相当于两个缩进级别)。所以你输入的那些行(或者包含制表符的行)缩进就错了。
在这里,我用"<T>
"标记了你代码中的所有制表符。
from django.db import models
import datetime
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def was_published_today(self):
<T> return self.pub_date.date() ==datetime.date.today()
<T> def __unicode__(self):
<T> <T> return self.question
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
<T> <T> return self.choice
在任何编程语言中,绝对不要混用制表符和空格。而在Python中,我们总是使用4个空格来缩进,这是< a href="http://www.python.org/dev/peps/pep-0008/" rel="nofollow">PEP-8推荐的做法。
无论你使用什么编辑器,搜索一下如何设置它,让制表符自动转换成4个空格。