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 withdev.py,prod.py, etc. -
Use
DJANGO_SETTINGS_MODULEto 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
Previous snippet
Using Environment Variables
Next snippet