在多文件Django应用中从__init__进行相对导入
我有一个Django项目,路径在 /var/django/project/,而 /var/django/ 这个文件夹已经在系统的路径里。
在这个项目里,我有:
___init__.py
manage.py
utils/
__init__.py
tools.py
utils/__init__.py
里面有一个叫 get_preview
的函数。
utils/tools.py
里面有一个叫 get_related
的函数。
我想知道 utils/__init__.py
怎么能从 utils/tools.py
导入 get_related
呢?
还有,utils/tools.py
怎么能从 utils/__init__.py
导入 get_preview
呢?
我试过相对导入和静态导入,但在 tools.py
里用 from project.utils import get_preview
时总是出错。
3 个回答
2
是的,这种结构不好。你需要注意不要在这两个文件之间创建循环导入。关于循环导入的更多信息。
2
你不能这样做(而且也不应该这样做)。如果你模块里的文件在引用和它相关的__init__.py
里的代码,那说明你的代码结构很糟糕。你可以选择把这两个函数都放到__init__.py
里,或者把它们都移出__init__.py
,或者把它们放到不同的模块里。这就是你能做的几种选择。
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()