在我的django应用程序中,我有一个名为projects和app的应用程序,名为utils。我在项目中也有一个名为utils的模块,用于保存项目的辅助函数。
所以我的文件结构看起来像这样
...
projects/
utils/
globals.py
views.py
utils/
tests.py
...
当我尝试从utils(外部)导入某些东西时,我遇到了一个问题,django认为我是从projects.utils导入的。所以这给了我一个错误
# inside projects.views.py
from utils.tests import foo
由于我在projects.utils中没有tests.py,导入给了我一个错误。当然,我知道并试图引用外部工具。
有没有办法在django中清楚地引用外部utils和projects.utils,或者我应该将projects.utils的名称更改为其他内容?
答案 0 :(得分:3)
默认情况下,import utils
包中直接包含的模块projects
调用将先尝试相对导入,然后选择projects.utils
。
最简单的方法是通过模块顶部的以下编译指示打开绝对导入:
from __future__ import absolute_import
这会关闭这种隐式相对导入行为(这也使它与Python 3匹配),因此import utils
将始终选择顶级模块。请注意,pragma只会影响它出现的文件中的导入:如果您希望在多个模块中执行该行为,则需要在每个文件中包含该pragma。
您仍然可以在此模式下执行相对导入,但您必须明确:
from . import utils