1

我是 2 Scoops of Django 1.8 读者。第 29 章(那些随机实用程序呢)建议创建一个core应用程序来存储常用代码。它还建议您可以使用此语法从中导入代码:

例如

from core.models import TimeStampedModel

这种相对导入似乎不起作用。我正在使用cookiecutter-django,我需要这样做:

from projectname.apps.core.models import TimeStampedModel

我尝试将我的添加APPS_DIRpath

sys.path.insert(str(APPS_DIR))

但这导致了导入冲突,因为现在有 2 个具有相同名称的模块,new_app并且projectname.apps.new_app.

我只想避免显式导入。有没有办法Installed Apps在不产生导入冲突的情况下将其包含在 python 路径中?关于外部应用程序导入的最佳做法是什么?

编辑:添加项目结构

.
├── 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
    └── ...
4

1 回答 1

0

如果要使用相对导入,则需要以这种方式导入

从 .core.models 导入 TimeStampedModel

这将采用执行代码的相对路径,这与 Django 1.8 不支持的绝对导入不同

于 2015-10-02T10:16:35.607 回答