I have a Django project, let\'s say \"project1\". Typical folder structure for applications is:
/project1/
/app1/
/app2/
...
How about you utilize the BASE_DIR
variable already present in the settings.py
.
Just add the following:
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
Hope this helps.
You can add your apps
folder to your python path by inserting the following in your settings.py
:
import os
import sys
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
Then you can use all the apps in this folder just in the same way as they were in your project root!
Just add __init__.py
(4 underscores in total) in your apps folder. Now you can just do
urlpatterns = [
path('polls/',include('apps.polls.urls')),
path('admin/', admin.site.urls)
]
In my case, my project folder structure is the following:
/project/
/apps/
/app1/
/app2/
/src/
/settings.py
...
So I've solved it with these two lines on my settings.py
:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, os.path.join(BASE_DIR, '../apps'))
No need to alter urls.py
.
If you're using virtualenv/virtualenvwrapper (which is a bit dated but still valid), you can use the included add2virtualenv
command to augment your python path:
mkdir apps
cd apps
pwd
[/path/to/apps/dir]
Copy that path to clipboard, then:
add2virtualenv /path/to/apps/dir
You can do this very easily, but you need to change the settings.py
to look like this:
INSTALLED_APPS = (
'apps.app1',
'apps.app2',
# ...
)
And your urls.py
to look like this:
urlpatterns = patterns('',
(r'^app1/',include('apps.app1')),
(r'^app2/',include('apps.app2')),
)
.. and modify any import
s to point to the app location