Django使用from . import views报相对导入错误的原因与解决方法
报错原因
- 单独执行了路由文件:如果你直接运行
urls.py这个文件本身,Python会把它视为顶层的独立脚本,不会把它所在的文件夹识别为Python包,相对导入语法里的.自然找不到对应的父包,直接触发报错。 - 项目目录不符合Django规范:要么
urls.py没有放在你创建的App目录下,要么App目录缺少__init__.py标识文件,导致Python无法将该目录判定为可导入的包。 - App未完成注册:你写路由对应的App没有添加到项目
settings.py的INSTALLED_APPS列表中,Django加载模块时不会识别该App为合法的项目组件,自然无法解析相对导入。 - 模块搜索路径异常:Python的模块搜索路径中没有包含你的项目根目录/ App所在目录,解释器找不到对应的包结构,无法解析相对路径。
解决方法
- 不要直接运行urls.py:Django的路由文件不需要手动执行,全程通过
python manage.py runserver启动项目即可,Django会自动按照项目结构解析路由文件里的相对导入逻辑。 - 补全规范的目录结构:
- 把该
urls.py放到对应的App目录下,不要直接放在项目根目录 - 在App目录下新增空的
__init__.py文件,确保Python能识别该目录为可导入的包
- 把该
- 完成App注册:打开项目根目录下的
settings.py,找到INSTALLED_APPS列表,把你的App名称添加进去,示例:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', '你的App名称' # 新增这一行 ] - 确认模块搜索路径:如果是自定义的目录结构,可以在启动文件中临时添加项目根目录到搜索路径,示例:
import sys sys.path.append("你的项目根目录绝对路径")
内容的提问来源于stack exchange,提问作者Jonathan Pangkey
相关产品推荐
相关产品推荐

