【问题标题】:Why does from . import views work and import views does not?为什么从.导入视图工作和导入视图不?
【发布时间】:2021-06-28 10:02:18
【问题描述】:

在探索 Django 时,我想到了这个问题。

假设这个结构:

.
├── db.sqlite3
├── manage.py
├── mysite
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── myapp
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    ├── urls.py
    └── views.py

myapp/urls.py中,这条语句导入视图很好:

from . import views

而只是 import views 引发 ModuleNotFoundError。

我的理解是import foosys.path 定义的目录列表中搜索 foo,其中包括当前包,也包括documentation

相对导入使用前导点。单个前导点表示 相对导入,从当前包开始。

所以,import foo 和 from . foo 应该完全一样。如果这是真的,为什么 django 进口不是这种情况?如果不是真的,我误会了什么?

【问题讨论】:

    标签: python django


    【解决方案1】:

    没有名为views的模块。

    没有以views 开头的绝对路径。

    如果您想从.views 导入您的视图,您可以这样做:

    from .views import YourView
    

    【讨论】:

    • myapp里面其实有views.py。而且,在 myapp/urls.py 内部,from . import views 工作正常,但 import view
    • views.pyurls.py 位于同一目录中,因此如果您希望views.py 位于urls.py 中,则应使用from . import views,这意味着它位于同一目录中,但import views 是没有查看 urls.py 所在的同一目录。
    猜你喜欢
    • 2012-12-05
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    相关资源
    最近更新 更多