在我的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/

10-12 21:48