I'm a 2 Scoops of Django 1.8 reader. Chapter 29 (what about those random utilities) suggests to create a core
app to store commonly used code. It also suggests that you can use this syntax to import code from it:
e.g.
from core.models import TimeStampedModel
How ever it seems that this relative import does not work. I'm using cookiecutter-django
and I needed to do:
from projectname.apps.core.models import TimeStampedModel
I tried adding my APPS_DIR
to the path
:
sys.path.insert(str(APPS_DIR))
But that resulted in import conflicts given that now there were 2 modules with the same name, new_app
and projectname.apps.new_app
.
I just want to avoid explicit imports. Is there a way to include the Installed Apps
in the python path without creating import conflicts? what are best practices regarding external apps imports?
edit: adds project structure
.
├── 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
└── ...
If you want to use relative imports you need to import it this way
from .core.models import TimeStampedModel
This would take the relative path from which the code is being executed, unlike absolute imports which are not supported in Django 1.8