Python与Unicode

0 投票
2 回答
620 浏览
提问于 2025-04-17 00:14

我正在通过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个空格。

撰写回答