我一直在尝试运行此代码,它会抛出缩进错误。无论我尝试什么,结果都是一样的。
如果我删除def __str__(self):
之前的缩进以及其余代码,它可以正常工作,但在输出时,它会显示“问题对象”而不是显示问题。
def __str__(self):
^
IndentationError: unexpected indent
以下是代码:
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
答案 0 :(得分:3)
答案 1 :(得分:1)
您正在混合空格和标签。假设您帖子中的代码使用了您在实际中使用的相同缩进字符,以下是您的代码实际缩进的方式,其中>---
代表一个标签,.
代表一个空格。
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone
class Question(models.Model):
....question_text = models.CharField(max_length=200)
....pub_date = models.DateTimeField('date published')
>---def __str__(self):
....>---return self.question_text
....def was_published_recently(self):
>---....return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
....question = models.ForeignKey(Question, on_delete=models.CASCADE)
....choice_text = models.CharField(max_length=200)
....votes = models.IntegerField(default=0)
>---def __str__(self):
....>---return self.choice_text
如您所见,您的缩进不一致。定义__str__()
的两个实例时,现有的缩进级别为4个空格,但函数定义缩进为1个制表符。这会导致错误。
按照惯例,Python代码只应使用空格缩进,而不是缩进,正是出于这个原因。
另请参阅PEP 8,特别是" Indentation"和" Tabs or Spaces?"