Как импортировать модели извне Django BASE_DIR - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над приложением 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 голосов
/ 04 февраля 2019

Импорт python основан на sys.path и не может быть вне директории верхнего уровня. Дополнительная информация .

Это значит, что если вы добавите верхнюю часть 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
...