从外部应用程序的 Django 相对导入
Django relative import from external app
我是 2 勺 Django 1.8 reader。第 29 章(那些随机实用程序呢)建议创建一个 core
应用程序来存储常用代码。它还建议您可以使用此语法从中导入代码:
例如
from core.models import TimeStampedModel
这个相对导入似乎不起作用。我正在使用 cookiecutter-django
,我需要做的是:
from projectname.apps.core.models import TimeStampedModel
我尝试将我的 APPS_DIR
添加到 path
:
sys.path.insert(str(APPS_DIR))
但这导致了导入冲突,因为现在有 2 个同名模块,new_app
和 projectname.apps.new_app
。
我只想避免显式导入。有没有办法在 python 路径中包含 Installed Apps
而不会产生导入冲突?关于外部应用程序导入的最佳做法是什么?
编辑: 添加项目结构
.
├── README.rst
├── manage.py
├── config
│ ├── __init__.py
│ ├── settings
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── local.py
│ │ ├── test.py
│ │ ├── production.py
│ │ └── staging.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── projectname
│ ├── __init__.py
│ ├── apps
│ │ ├── __init__.py
│ │ ├── core
│ │ │ └── __init__.py
│ │ └── new_app
│ │ └── __init__.py
│ ├── static
│ │ └── ...
│ └── templates
│ └── ...
├── requirements
│ ├── base.txt
│ ├── local.txt
│ ├── production.txt
│ └── test.txt
└── tests
└── ...
如果你想使用相对导入你需要这样导入
从 .core.models 导入 TimeStampedModel
这将采用执行代码的相对路径,这与 Django 1.8 不支持的绝对导入不同
我是 2 勺 Django 1.8 reader。第 29 章(那些随机实用程序呢)建议创建一个 core
应用程序来存储常用代码。它还建议您可以使用此语法从中导入代码:
例如
from core.models import TimeStampedModel
这个相对导入似乎不起作用。我正在使用 cookiecutter-django
,我需要做的是:
from projectname.apps.core.models import TimeStampedModel
我尝试将我的 APPS_DIR
添加到 path
:
sys.path.insert(str(APPS_DIR))
但这导致了导入冲突,因为现在有 2 个同名模块,new_app
和 projectname.apps.new_app
。
我只想避免显式导入。有没有办法在 python 路径中包含 Installed Apps
而不会产生导入冲突?关于外部应用程序导入的最佳做法是什么?
编辑: 添加项目结构
.
├── README.rst
├── manage.py
├── config
│ ├── __init__.py
│ ├── settings
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── local.py
│ │ ├── test.py
│ │ ├── production.py
│ │ └── staging.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── projectname
│ ├── __init__.py
│ ├── apps
│ │ ├── __init__.py
│ │ ├── core
│ │ │ └── __init__.py
│ │ └── new_app
│ │ └── __init__.py
│ ├── static
│ │ └── ...
│ └── templates
│ └── ...
├── requirements
│ ├── base.txt
│ ├── local.txt
│ ├── production.txt
│ └── test.txt
└── tests
└── ...
如果你想使用相对导入你需要这样导入
从 .core.models 导入 TimeStampedModel
这将采用执行代码的相对路径,这与 Django 1.8 不支持的绝对导入不同