在多文件Django应用程序中从__init__相对导入

时间:2009-10-15 00:29:20

标签: python django import

我有一个位于/ var / django / project /的Django项目,其中/ var / django /在PATH中

在该项目中我有:

___init__.py
manage.py
utils/
    __init__.py
    tools.py

utils/__init__.py包含名为get_preview

的函数

utils/tools.py包含名为get_related

的函数

utils/__init__.py如何从get_related导入utils/tools.py

utils/tools.py如何从get_preview导入utils/__init_.py

我尝试了相对导入以及静态导入,但在尝试tools.py

时似乎在from project.utils import get_preview中出现错误

3 个答案:

答案 0 :(得分:2)

你不能(也不应该)。如果模块中的文件引用与其关联的__init__.py中的代码,那么构建代码的代码非常糟糕。要么将两个函数移动到__init__.py中,要么将它们都移出__init__.py,或者将它们放入单独的模块中。这些是你唯一的选择。

答案 1 :(得分:2)

是的,这是糟糕的结构。你必须注意这两个文件之间创建一个循环导入。 About circular imports

答案 2 :(得分:0)

你可以这样做,你只需要在运行时进行一次导入就可以避免循环导入。

例如,__init__.py

from project.utils.tools import get_related

def get_preview():
     # ...

tools.py

def get_related():
    from project.utils import get_preview
    # ...
    get_preview()