来自。导入模型有效,但导入模型不起作用

时间:2015-05-01 06:28:06

标签: python django python-3.x import

我正在开发一个webproject并使用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"

2 个答案:

答案 0 :(得分:4)

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

当本地程序包与python标准库程序包同名时,这非常烦人。

您可以执行from __future__ import absolute_import,完全关闭隐式相对导入。在PEP 328中描述了这种关于模糊性的理由。我相信Python 3000完全关闭隐式相对导入。

您仍然可以进行相对导入,但您必须明确地执行这些操作,如下所示:

from . import models

因此,相对导入from . import models起作用,而绝对导入import models不起作用。

答案 1 :(得分:4)

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

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

但是,明确的相对进口是绝对进口的可接受替代方案:

from . import models
from .models import mymodel

您应该read PEP-8 on imports了解有关导入包的详细解释。