Django跨应用导入models时报relative import超出顶层包错误如何解决
Django跨应用导入错误解决方案
错误原因分析
两种导入报错的核心原因是Python解释器的模块搜索路径(sys.path)没有包含你的项目根目录,或是项目包结构配置不符合Django规范:
- 相对导入报错:当前运行入口的顶层包被判定为
api应用目录,向上一层的相对导入超出了当前识别的包层级 - 绝对导入报错:你误将项目根目录
electron当成了包名,但Django应用的导入不需要带上根目录名,直接使用应用名导入即可
解决步骤
- 确认基础配置
- 检查
api和elec_meter两个目录下都存在__init__.py文件(空文件即可,用于标识Python包) - 检查两个应用都已添加到项目
settings.py的INSTALLED_APPS列表中:INSTALLED_APPS = [ # ... 其他Django内置应用 'api', 'elec_meter', ]
- 检查
- 替换导入语句
直接用应用名作为导入前缀,不需要带外层的electron根目录名,也不用相对导入:from elec_meter.models import * - 如仍提示找不到模块,手动添加项目根目录到Python搜索路径
在api/views.py的最开头添加以下代码:
这段代码会自动把import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))electron根目录添加到模块搜索路径中,后续即可正常识别两个应用的模块。
验证方法
修改完成后启动Django服务,如果没有导入报错,调用elec_meter里的模型类可以正常实例化,即说明配置生效。
内容的提问来源于stack exchange,提问作者leauradmin
相关产品推荐
相关产品推荐

