Django中出现Expected an indented block错误,请求排查解决
解决Django模型中的
Expected an indented block错误 嘿,这个问题我太熟了!你碰到的Expected an indented block是Python最常见的语法报错之一,咱们来一步步拆解解决:
首先看你代码里的这段:
def __unicode__(self): # return self.title
你把__unicode__方法里的返回语句注释掉了,导致这个方法完全是空的。Python有个硬性规定:每个函数/方法定义后,必须跟着缩进的可执行代码块——哪怕啥都不干,也得用pass来占位,不然就会抛出这个缩进错误。
另外,我还发现两个容易踩坑的细节,顺便给你提个醒:
CharField必须指定max_length参数,这是Django的硬性要求,不然运行时会直接报错,比如标题可以设max_length=120,内容根据需求设更长的数值- 如果你用的是Python 3,其实完全不需要
__unicode__方法,只保留__str__就足够了;要是还在维护Python 2的老项目,那得把__unicode__的内容补全,不能空着
修正后的完整代码
from __future__ import unicode_literals from django.db import models # Create your models here. class Post(models.Model): title = models.CharField(max_length=120) # 补充必填的max_length参数 content = models.CharField(max_length=2000) # 根据实际需求调整长度 updated = models.DateTimeField(auto_now=True, auto_now_add=False) timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) def __str__(self): return self.title # 如果你用Python 2环境,就保留下面这段并取消注释,Python 3直接删掉即可 # def __unicode__(self): # return self.title
快速修复步骤
- 处理空方法:要么直接删掉
__unicode__(Python 3推荐这么做),要么取消注释里面的return self.title,或者加个pass占位(比如def __unicode__(self): pass) - 给所有
CharField补上max_length参数,不然Django会跟你闹脾气
这么改完之后,那个缩进错误就会消失,同时也解决了CharField的参数问题,模型就能正常运行啦!
内容的提问来源于stack exchange,提问作者shashanksen
相关产品推荐
相关产品推荐

