Split Settings for Dev and Prod

A snippet showing how to split settings into multiple files.


# settings/base.py

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]
  

# settings/dev.py

from .base import *

DEBUG = True
ALLOWED_HOSTS = ["*"]

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}
  

# settings/prod.py

import os
from .base import *

DEBUG = False
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "").split(",")

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ.get("POSTGRES_DB"),
        "USER": os.environ.get("POSTGRES_USER"),
        "PASSWORD": os.environ.get("POSTGRES_PASSWORD"),
        "HOST": os.environ.get("POSTGRES_HOST", "127.0.0.1"),
        "PORT": os.environ.get("POSTGRES_PORT", "5432"),
    }
}
  

# Development
export DJANGO_SETTINGS_MODULE="project.settings.dev"
python manage.py runserver

# Production
export DJANGO_SETTINGS_MODULE="project.settings.prod"
gunicorn project.wsgi:application
  
Explanation:
  • Keep shared defaults in base.py, then extend with dev.py, prod.py, etc.
  • Use DJANGO_SETTINGS_MODULE to switch between environments easily.
  • Use SQLite for local dev; PostgreSQL or MySQL for production deployments.
  • Combine with environment variables for secrets and per-environment overrides.
  • Category Deployment & Settings
  • Total Views 1229
  • Last Modified 26 November, 2025
  • Tags #settings #environment #dev #prod
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.