来自。导入模型有效,但导入模型无效

问题描述 投票:0回答:3

我正在开发一个网络项目并使用 Django。在我的

views.py
文件中,我想要访问要为其导入
models
的数据库。

这是我的目录结构:

├── project  
│   ├── __init__.py  
│   ├── settings.py  
│   ├── urls.py  
│   └── wsgi.py  
├── app  
│   ├── admin.py  
│   ├── __init__.py  
│   ├── models.py  
│   ├── tests.py  
│   └── views.py  
├── manage.py

在我的

views.py
中,我正在做
import models
,但我得到了
importError
。虽然
from . import models
有效。

为什么?

但是以下工作没有任何错误:

├── __init__.py
├── mod1.py
└── mod2.py

mod1.py

import mod2

print(mod2.foo())

mod2.py

def foo():
    return "Hello"
python django python-3.x import
3个回答
7
投票

为了使用绝对导入,您需要参考完整的package.sibling组合:

import app.models
from app import models
from app.models import mymodel

但是,显式相对导入是绝对导入的可接受替代方案:

from . import models
from .models import mymodel

您真的应该阅读有关导入的 PEP-8,以获得有关导入包的详细解释。


5
投票

import models
的问题是你不知道它是绝对导入还是相对导入。 models 可以是 python 路径中的模块,也可以是当前模块中的包。

当本地包与Python标准库包同名时,这是相当烦人的。

您可以执行

from __future__ import absolute_import
来完全关闭隐式相对导入。在 PEP 328 中对此进行了描述,包括对模糊性的论证。我相信 Python 3000 已经完全关闭了隐式相对导入。

您仍然可以进行相对导入,但您必须显式地执行它们,如下所示:

from . import models

因此,相对导入

from . import models
有效,而绝对导入
import models
则无效。


0
投票

我认为人们对绝对路径与相对路径感到困惑。无论如何,他们可以达到相同的目标。另外

import models
主要用于导入标准库

请参阅我的回复

导入视图与来自 .导入视图

© www.soinside.com 2019 - 2024. All rights reserved.