如何从Django BASE_DIR外部导入模型

时间:2019-02-04 06:41:11

标签: python django python-import

我正在开发一个Django应用,我想在其中将一些类/函数从generator.py导入到views.py中,以处理用户提交的输入。我的文件夹结构如下:

project/
   models/
      __init__.py
      generator.py
   web/
      django/
         __init__.py
         settings.py
         urls.py
         wsgi.py
      django_app
         __init__.py
         views.py
         etc.

在views.py内部,我有

from ...models.generator import Generator

当我尝试运行服务器时,我得到的是:

ValueError: attempted relative import beyond top-level package

我已经看到很多答案,但是大多数答案都是关于操纵sys.path或更改PYTHONPATH的。我不确定怎么做以及在哪里做,因为我是Django的新手。

有人可以准确地告诉我要运行哪些命令以完成导入吗?

1 个答案:

答案 0 :(得分:0)

python的导入基于sys.path,并且不能在顶级目录之外。 More information

这意味着,如果您在BASE_DIR中附加sys.path路径的顶部,则可以导入。但这是一个棘手的方法。

def import_function():
    import sys
    sys.path.append(os.path.dirname(BASE_DIR))
    module = __import__('models.generator')  # import code
    sys.path.pop()
    return module

g_module = import_function()
g_module.Generator