[Fixed]-Django – How to deal with the paths in settings.py on collaborative projects

30πŸ‘

βœ…

import os.path

#Get the absolute path of the settings.py file's directory
PWD = os.path.dirname(os.path.realpath(__file__ )) 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or 
    # "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.

    #Add Templates to the absolute directory
    os.path.join(PWD, "Templates") 
)

That’s how I do relative imports. Note that is usually wise to have a separate localsettings.py file, or something similar.

πŸ‘€Blue Peppers

3πŸ‘

settings.py is just another Python module. Import and use the various functions in os.path to build your paths.

3πŸ‘

Do this:

import os
ROOT_PATH = os.path.dirname(__file__)
.
.
.
TEMPLATE_DIRS = (
    os.path.join(ROOT_PATH, 'templates'),
)

This will set the paths according to the directory of settings.py file

πŸ‘€crodjer

1πŸ‘

The alternative to using relative path from the settings.py file, is for each developer to have their own settings.py.

# settings.py
TEMPLATE_DIRS = (
    'c:\django\templates\',
)

# dev-x-settings.py
import settings
TEMPLATE_DIRS = (
    'd:\dev\django\project\templates\'
)

The dev-x-settings.py imports all the settings from the base file, and changes the bits and pieces they need to. Also very handy for maintaining a local sqlite database and the like.

We usually set out our settings as:

/settings/
    __init__.py
    production.py
    staging.py
    test.py
    dev-x.py
    dev-y.py

Then all you need to worry about is running the server and passing it the correct settings.py file.

πŸ‘€Josh Smeaton

1πŸ‘

Besides using os.path you could add

try:
    import * from settings_local
except:
    pass

at the end of you settings.py. Every developer can then create his own settings_local.py file which is not checked in into the VCS!

Leave a comment