从外部应用程序

时间:2015-10-02 01:12:05

标签: django python-3.x relative-import cookiecutter

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

e.g。

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

1 个答案:

答案 0 :(得分:0)

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

<。>来自.core.models导入TimeStampedModel

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