如何从Shop应用的model.py导入Product类到Cart应用的cart.py并解决导入错误
解决ImportError: 尝试的相对导入超出顶级包问题
错误原因
你使用的from ..Shop.models import Product相对导入层级错误,或是直接单独运行cart.py的方式导致Python将Cart目录识别为顶级包,..试图跳出该顶级包从而触发报错。
正确导入方案
方法1:使用绝对导入(推荐)
由于Django项目中Shop应用已在INSTALLED_APPS中注册,直接使用项目内绝对导入路径即可:
from Shop.models import Product
方法2:正确使用相对导入(需注意运行方式)
若坚持使用相对导入,需满足两个前提:
- 确保
online是项目顶级包(即包含settings.py的目录) - 不要直接运行
cart.py文件(比如不要执行python Cart/cart.py),必须通过Django的manage.py启动项目或运行相关命令
此时正确的相对导入语句为:
from ..Shop.models import Product
不过这种方式依赖Django的包结构识别,稳定性不如绝对导入。
额外注意事项
- 始终通过Django的
manage.py执行代码,避免单独运行app内的py文件,否则Python的包路径识别会出现偏差。 - 检查项目
settings.py中的INSTALLED_APPS列表,确认已添加Shop应用,确保Django能正常识别该app。
内容的提问来源于stack exchange,提问作者karim
相关产品推荐
相关产品推荐

