从外部应用程序的 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_appprojectname.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 不支持的绝对导入不同