You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django导入views模块报错:相对导入无已知父包

解决Django中ImportError: attempted relative import with no known parent package的问题

这问题我刚入门Django的时候也踩过一模一样的坑!咱们一步步拆解原因和解决办法:

错误核心原因

你用的from . import views是相对导入语法,它只能在被Python识别为「包」的目录里使用。如果你的urls.py所在目录不符合以下任一条件,就会触发这个错误:

  • 目录里没有__init__.py文件(Python3.3+支持隐式包,但Django场景下建议显式创建)
  • 该目录不在Python的sys.path搜索路径中
  • 你直接运行了urls.py文件(脱离了Django项目的上下文环境)

具体解决办法

1. 先核对你的项目结构是否正确

标准Django项目的目录结构应该是这样的:

my_django_project/
    my_django_project/  # 项目根配置目录
        __init__.py
        settings.py
        urls.py  # 全局路由文件,不能用相对导入
    my_app/  # 你的业务应用目录
        __init__.py  # 空文件即可,必须存在
        urls.py  # 应用级路由,这里用相对导入才正确
        views.py
        models.py
  • 如果你的urls.py是应用目录下的路由文件:那你的代码from . import views完全正确,只需确保这个应用已经加到settings.py的INSTALLED_APPS列表里。
  • 如果你的urls.py是项目根目录下的全局路由:不能用相对导入,要改成绝对导入,示例如下:
    from django.urls import path
    from my_app import views  # 把my_app替换成你的实际应用名称
    urlpatterns = [
        path('', views.home, name='home'),
    ]
    

2. 绝对不要直接运行urls.py文件

很多新手会犯这个错:直接用python urls.py测试代码。但Django的模块必须在项目上下文环境中运行,直接运行会让Python无法识别这个文件所属的包。正确的启动方式是在项目根目录下执行:

python manage.py runserver

3. 确保应用目录里有__init__.py

即使Python3支持隐式命名空间包,在Django中最好还是在每个应用目录下创建一个空的__init__.py文件,明确告诉Python这是一个可导入的包。

内容的提问来源于stack exchange,提问作者Marwane Elalama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:57:41