【问题标题】:How to import models from outside Django BASE_DIR如何从 Django BASE_DIR 外部导入模型
【发布时间】:2019-02-04 06:41:10
【问题描述】:

我正在开发一个 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 很陌生。

谁能告诉我要运行哪些命令才能完成导入?

【问题讨论】:

  • 你试过from project.models.generator import Generator
  • 是的,它说 ModuleNotFoundError: No module named 'project'

标签: python django python-import


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2014-10-07
    • 2015-11-15
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多