2

在我的 django 应用程序中,我有一个名为项目的应用程序和一个名为 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 的名称更改为其他名称?

4

1 回答 1

4

默认情况下,import utils直接包含在projects包中的模块中的调用将首先尝试相对导入并选择projects.utils.

最简单的方法是通过模块顶部的以下编译指示打开绝对导入:

from __future__ import absolute_import

这将关闭此隐式相对导入行为(这也使其与 Python 3 匹配),因此import utils将始终选择顶级模块。请注意,pragma 只会影响它发生的文件中的导入:如果您希望在多个模块中使用该行为,则需要在每个文件中包含 pragma。

您仍然可以在此模式下执行相对导入,但您必须明确:

from . import utils
于 2012-12-04T02:39:13.320 回答