Easily Add Directory Path for Django Apps

A simple way to do this is to add a couple of lines to manage.py appending our new directory to the python path. Your manage.py file should look something like this:

#!/usr/bin/env python
from django.core.management import execute_manager
try:
    import settings # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
    sys.exit(1) 

if __name__ == "__main__":
    execute_manager(settings)  

To add our directory we’ll change it to the following:

#!/usr/bin/env python
import sys

from os.path import abspath, dirname, join
from django.conf import settings
from django.core.management import setup_environ, execute_from_command_line

try:
    import settings as settings_mod # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
    sys.exit(1)

# setup the environment before we start accessing things in the settings.
setup_environ(settings_mod)
sys.path.insert(0, join(settings.PROJECT_ROOT, "apps"))

if __name__ == "__main__":
    execute_from_command_line() 

This of course assumes that you have a “PROJECT_ROOT” declaration in your settings.py file. Its pretty simple but it gets the job done. Now you don’t have to append apps.whateverapp to every import.


Comments