DEV Community

Dimitrios Desyllas
Dimitrios Desyllas

Posted on

How to load .env in Django Project

I come from a PHP background, mostly using Laravel/Symfony. Recently, I started using Django, and I wanted to reproduce the way environmental variables are provided via a .env file.

I wanted the .env to load once I start the devserver without having to worry about it. Therefore I followed these steps:

Basic Project Setup For Demonstration

Make a basic app (Skip if Django is already set up)

To start, I created a virtual environment, set up a project.

mkdir myproject
cd myproject
python3 -m venv ./venv
echo vencv >> .gitignore
pip install Django
django-admin startproject mysite .
Enter fullscreen mode Exit fullscreen mode

Install python-dotenv (Skip if already done)

pip install python-dotenv
Enter fullscreen mode Exit fullscreen mode

Load .env file

Loading environmental variables from a .env file is simple with python-dotenv:

from dotenv import load_dotenv
load_dotenv()

Enter fullscreen mode Exit fullscreen mode

The question is though is WHERE to put this code. Loading the .env file every time can be tedious. Based on the setup I previously mentioned, my project created the following structure (some files omitted for simplicity):

myproject/
├── mysite/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── .env
Enter fullscreen mode Exit fullscreen mode

As you can see, the mysite directory is loaded as a module. All environmental variables are stored in the .env file. To load them, I added the code to the mysite/__init__.py file:

from dotenv import load_dotenv
load_dotenv()
Enter fullscreen mode Exit fullscreen mode

This ensures that all environmental variables are loaded whenever I run:

python manage.py runserver
Enter fullscreen mode Exit fullscreen mode

Drawbacks

The downside to this approach is that if I make any changes to the .env file, I have to stop and restart the server to reload the environment variables.

Top comments (0)