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)