Handling Django Settings Files¶

I have seen a lot of talk over the past couple years about how to handle different settings files and databases, synced between production and development. I have happened onto a way of doing it that makes me happy, and figured I would share it with the world.

File structure¶ I use a file structure that looks like this: project / settings / __init__ . py ( empty ) base . py sqlite . py postgres . py The base.py contains all of the configuration options that are shared among the databases. INSTALLED_APPS, etc. All of the DATABASE settings should be specified in the more-specific files. As well as things that differ by environment, like remote servers, cache settings, cookie domains, and other things. This allows you to run the sqlite settings file, and have it be set to localhost, or whatever your development settings are. Then in production you just run against the postgres settings. A good example of this being used in practice is on Read the Docs. But wait, there’s more!

manage.py for dev¶ ./manage.py is great for development. It is the easiest way to get started, and it automatically sets up your paths and stuff. With my setup, I actually explicitly set manage.py’s settings file to the sqlite file. This means that whenever you are using manage.py, you are in a development context. So, what do you do about production?