Voici l'approche que nous utilisons:
- un 
settingsmodule pour diviser les paramètres en plusieurs fichiers pour une meilleure lisibilité; 
- un 
.env.jsonfichier pour stocker les informations d'identification et les paramètres que nous voulons exclure de notre référentiel git, ou qui sont spécifiques à l'environnement; 
- un 
env.pyfichier pour lire le .env.jsonfichier 
Compte tenu de la structure suivante:
...
.env.json           # the file containing all specific credentials and parameters
.gitignore          # the .gitignore file to exclude `.env.json`
project_name/       # project dir (the one which django-admin.py creates)
  accounts/         # project's apps
    __init__.py
    ...
  ...
  env.py            # the file to load credentials
  settings/
    __init__.py     # main settings file
    database.py     # database conf
    storage.py      # storage conf
    ...
venv                # virtualenv
...
Avec .env.jsoncomme:
{
    "debug": false,
    "allowed_hosts": ["mydomain.com"],
    "django_secret_key": "my_very_long_secret_key",
    "db_password": "my_db_password",
    "db_name": "my_db_name",
    "db_user": "my_db_user",
    "db_host": "my_db_host",
}
Et project_name/env.py:
<!-- language: lang-python -->
import json
import os
def get_credentials():
    env_file_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    with open(os.path.join(env_file_dir, '.env.json'), 'r') as f:
        creds = json.loads(f.read())
    return creds
credentials = get_credentials()
Nous pouvons avoir les paramètres suivants:
<!-- language: lang-py -->
# project_name/settings/__init__.py
from project_name.env import credentials
from project_name.settings.database import *
from project_name.settings.storage import *
...
SECRET_KEY = credentials.get('django_secret_key')
DEBUG = credentials.get('debug')
ALLOWED_HOSTS = credentials.get('allowed_hosts', [])
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ...
]
if DEBUG:
    INSTALLED_APPS += ['debug_toolbar']
...
# project_name/settings/database.py
from project_name.env import credentials
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': credentials.get('db_name', ''),
        'USER': credentials.get('db_user', ''),
        'HOST': credentials.get('db_host', ''),
        'PASSWORD': credentials.get('db_password', ''),
        'PORT': '5432',
    }
}
les avantages de cette solution sont:
- informations d'identification et configurations spécifiques à l'utilisateur pour le développement local sans modifier le référentiel git;
 
- configuration spécifique à l'environnement , vous pouvez avoir par exemple trois environnements différents avec trois
.env.json comme le développement, la mise en scène et la production; 
- les informations d'identification ne sont pas dans le référentiel
 
J'espère que cela vous aidera, faites-moi savoir si vous voyez des mises en garde avec cette solution.