# django CMS 5: A Django-Native CMS With Inline Editing and a Placeholder Plugin Model

> django CMS is a Django package that adds a hierarchical page tree, front-end editing and a plugin system to an existing Django project. It fits teams already committed to Django who need editors working on rendered pages, and it is the wrong tool for anyone who wants a CMS without writing Python.

**django-cms/django-cms** — The easy-to-use and developer-friendly enterprise CMS powered by Django 

- Repository: https://github.com/django-cms/django-cms
- Website: http://www.django-cms.org
- Stars: 10,674 · Forks: 3,192
- Language: Python
- License: NOASSERTION
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/django-cms-django-cms

## The Problem django CMS Solves for Django Teams

Most Django projects that need editable pages end up building one. Someone writes a Page model, a template tag for navigation, a WYSIWYG field, then a permissions layer, and the result is a bespoke CMS maintained by the same people who should be building the product. django CMS is that layer, packaged. It targets developers who have chosen Django and now need editors to publish without going through a deployment, and it targets the editors themselves, who work on the rendered page rather than in a separate admin form.

The README describes the project as "Lean, open-source enterprise content management powered by Django" and lists the pieces it composes: internationalisation and multi-site support, front-end editing, a placeholder and plugin system, rich-text editor integration, a hierarchical page tree with SEO-friendly URLs, and apphooks for pulling Django applications into the page tree. Those are the features that would otherwise be hand-built. The audience is narrower than the feature list suggests: you need a Django codebase, and you need someone who can write plugins in Python when the built-in components are not enough.

## Placeholders, Plugins and the Page Tree: How Content Actually Flows

The architecture has three layers worth separating. The page tree stores hierarchy and URLs. A placeholder is a named slot inside a page template, declared in the template itself. A plugin is the content object that fills a placeholder, and plugins nest, so a container plugin can hold text, image and teaser plugins inside it.

That indirection is the design decision that shapes everything else. Because placeholders live in templates, the same placeholder name can appear on many pages and be filled differently per page. Because plugins are Python classes registered with the CMS, adding a new content type is a code change, not a configuration change. In exchange, the content model is not editable from the admin: an editor rearranges existing plugin types but cannot invent a new one. The README puts versioning, editorial workflows and headless setups outside the core, as "official add-on packages", which means a publishing approval chain is an extra dependency rather than something you get from `pip install django-cms`.

The front-end editing claim is the other half. The README says editors work "directly on rendered pages", so the editing UI is the site itself in edit mode, not a form disconnected from the final layout. That is a real difference from admin-only CMSs, and it is also the reason the template layer matters so much: if your templates do not declare placeholders, there is nothing to edit inline.

## Installing django CMS and Creating a First Project

The README gives a four-command quickstart. The `djangocms` command clones the official project template, installs requirements, runs migrations and creates a superuser, so you do not assemble settings by hand for a new project.

```bash
python -m pip install django-cms
djangocms mysite --interactive
cd mysite
python -m manage runserver
```

Run it without arguments and the README says you are guided through the available options interactively, including a headless mode. After `runserver`, the development server is up and the superuser created by the command can log in; the page tree starts empty, so the next step is adding a page and a placeholder in a template.

If a Django project already exists, the README's instruction is to run the same command against the current directory rather than creating a new one:

```bash
djangocms .
```

That path assumes your settings and URL configuration are conventional enough for the command to patch them. The README does not document what it changes or how to undo it, so run it on a branch or with the working tree clean. For containerised setups the README points at a separate repository, `django-cms-quickstart`, instead of describing Docker steps here. The package itself requires Python 3.10 or newer and Django 5.2 or newer according to `pyproject.toml`, with classifiers through Django 6.1.

## Where django CMS Is the Wrong Choice

The dependency footprint is the first constraint. `pyproject.toml` requires Django 5.2 or newer and Python 3.10 or newer, plus `django-classy-tags`, `django-formtools` and `django-sekizai`. A project pinned to an older Django cannot adopt this version without an upgrade first, and the upgrade guide is a separate document the README links to rather than something summarised in the repository root.

Content shape is the second. django CMS is built around a page tree with SEO-friendly URLs. If your content is a flat feed of articles, products or events with no hierarchy, the page tree is overhead you will work around, and the plugin system becomes a second content model sitting beside your own. Teams in that position usually want Django's admin plus a model, not a CMS layer.

The third constraint is the one the README states indirectly by omission. Versioning, editorial workflows and headless delivery are described as available "via official add-on packages", not as core. A newsroom that needs draft, review and publish states is not finished at `pip install django-cms`; it is finished when those add-ons are installed and configured, and the README does not enumerate them or their compatibility with the 5.1.2 release. Budget for that gap. The README also does not document rollback for the `djangocms .` command on an existing project, so treat it as a one-way operation unless you verify otherwise.

## django CMS Compared With Wagtail and WordPress

Wagtail is the comparison Django developers make most often, and the difference is in the content model. Wagtail organises content as pages in a tree too, but its editing model is built around StreamField, where a developer defines a block schema and editors compose a page from those blocks in the admin. django CMS puts the placeholder in the template and the plugin in Python, and the editing happens on the rendered front end. If you want editors constrained to a schema the developer defined, Wagtail's approach is more direct. If you want editors rearranging components on a live-looking page, django CMS is built for that.

Against WordPress the split is language and hosting. WordPress is PHP with a plugin ecosystem you install from an admin; django CMS is a Python package you add to a Django project, and every new content component is a class you write. The README's own framing is enterprise and developer-friendly, which is accurate as far as it goes: the trade is that nothing is a one-click install from inside the CMS.

Drupal sits closest on the content-modelling side, with a structured entity system and a page hierarchy, but it is PHP and its configuration lives in its own admin rather than in your application's source tree. For a team already running Django, the deciding factor is usually not features but whether the CMS should live inside the codebase or beside it.

## Maintenance, Licensing and Upgrade Cost

The repository is not archived and the last push was on 2026-09-21, with releases 5.1.2 and 5.0.11 both published on 2026-08-27 and 5.0.10 on 2026-08-06. Two maintained release lines in parallel means security fixes and compatibility work land in both, and the README points to a dedicated upgrade guide and release notes rather than describing migration steps inline. Upgrading is a documented but separate task, not something the quickstart covers.

Licensing needs care. The PyPI badge and `pyproject.toml` both state BSD-3-Clause, and the classifiers include "License :: OSI Approved :: BSD License", but the repository's license metadata is reported as NOASSERTION. The README's credits section says the `LICENSE` file contains credits to third-party contributions, so read that file before redistributing. A permissive licence on the core does not automatically cover every bundled asset, and the front-end build pulls in a long list of npm packages under their own terms.

The project is backed by the django CMS Association, a non-profit founded in 2020 that the README says provides guidance, infrastructure and funding for core development. Membership and tech-partner programmes are the funding route. That matters for planning: the sustainability model is organisational rather than a single company's product, and the README directs commercial support and hosting questions to those partner lists rather than to the repository.

## Conclusion

Adopt django CMS if your project is already Django and non-technical editors need to change page content without a deploy. Do not adopt it if you want a CMS that runs without Python developers, or if your content model is a flat stream of articles rather than a page tree. Before committing, check which add-on packages you need for versioning and editorial workflows, since the README lists those as separate official packages rather than core features, and confirm the Django version in pyproject.toml matches your project.

## FAQ

### How do I install django CMS?

Install the package with pip, then run the djangocms command to create a project: `python -m pip install django-cms`, then `djangocms mysite --interactive`. The command clones the official project template, installs requirements, runs migrations and creates a superuser. If you already have a Django project, run `djangocms .` in its root directory instead.

### What is django CMS?

It is an open-source content management system built on Django, published as the django-cms package on PyPI. It provides a hierarchical page tree, front-end inline editing, placeholders and a plugin system for reusable content components, plus internationalisation and multi-site support.

### How do I use django CMS in an existing Django project?

The README says to run `djangocms .` in the root directory of an existing Django project to add django CMS to it. The README does not document what that command modifies or how to reverse it, so run it on a clean working tree.

### Is django CMS free?

Yes. The package is published on PyPI under BSD-3-Clause according to the badge and pyproject.toml, and it is backed by the non-profit django CMS Association. Note that the repository's license metadata is reported as NOASSERTION, and the LICENSE file contains credits to third-party contributions worth reading before redistribution.

### What is the difference between django CMS and Drupal?

Both offer structured content and a page hierarchy, but django CMS is a Python package you add to a Django project, so new content components are Python plugin classes in your source tree. Drupal is PHP and its configuration lives in its own admin rather than in the application code.

### What is the difference between django CMS and Wagtail?

Wagtail has editors compose pages from a block schema the developer defines, edited in the admin. django CMS declares placeholders in the page template and fills them with Python plugin classes, and the README says editors work directly on rendered pages through front-end inline editing.

## Sources

- [django-cms/django-cms on GitHub](https://github.com/django-cms/django-cms)
- [Issues](https://github.com/django-cms/django-cms/issues)
- [Project website](http://www.django-cms.org)
- [README](https://github.com/django-cms/django-cms/blob/main/README.md)
- [Releases](https://github.com/django-cms/django-cms/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/django-cms-django-cms
