在我的Django应用程序中,我有一个名为Projects的应用程序和一个名为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的名称更改为其他名称?
最佳答案
默认情况下,直接在import utils
包中包含的模块中的projects
调用将首先尝试相对导入并选择projects.utils
。
最简单的方法是通过模块顶部的以下编译指示来打开绝对导入:
from __future__ import absolute_import
这将关闭此隐式相对导入行为(这也使其与Python 3匹配),因此
import utils
将始终选择顶层模块。请注意,编译指示只会影响它发生的文件中的导入:如果要在多个模块中执行该行为,则需要在每个文件中包括该编译指示。您仍然可以在这种模式下执行相对导入,但是必须明确:
from . import utils
关于python - 在Django中导入两个具有相同名称的模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13695143/