The title of this post, “Is Django a Full Stack Framework?” is a question I receive often from new web developers. It’s a very valid question so I wanted to address it here rather than keep repeating myself in individual emails.

Websites can be broken up into two major components: the “back-end” and the “front-end”. The back-end is where the underlying database and any related logic lives, while the front-end is the HTML, CSS, and JavaScript that controls how this data looks on a webpage.

For example in a blog website, the back-end would the database containing individual blog posts and perhaps user comments too. The front-end would be the HTML, CSS, and perhaps JavaScript that displays the content.

Django was first released back in 2005 when front-ends were relatively straightforward. There were no dedicated JavaScript front-end frameworks like React, Angular, Vue, Ember, and the rest.

As a result Django comes with an intentionally basic Templating Language that can perform basic logic such as loops and filters. And to its credit, Django has resisted the temptation to add complexity here; the Django Templating Language still remains very bare-boned in functionality.

Most Django developers therefore fall into the back-end camp of the full-stack spectrum. They control the database and logic of a site and often, in companies, rely on a separate front-end developer to customize the presentation in a Django template.

These days an equally common set-up is to use Django Rest Framework to transform a Django website into an internal API that can then be consumed by a dedicated JavaScript front-end framework.

The end result for a viewer is still one website, but under-the-hood a Django back-end is sending HTTP requests and responses to a separate JavaScript front-end. With this approach a large site like Instagram, which uses Django, can support multiple front-ends (web, iOS, Android) from a single back-end. This is also known as “API first” development and is increasingly popular.

In practice almost no developer is truly “full-stack” these days; there’s simply too much to know with Python, JavaScript, and related frameworks. Can developers use both well? Yes. But they will always be somewhere on the spectrum such as 70/30 back-end vs front-end or the inverse.

So is Django a full-stack framework? Yes I would argue. You can build a powerful website with just traditional Django but generally speaking if someone says “full-stack” they are talking about an internal API that interacts with a separate, often complex, front-end powered by a JavaScript framework.