django CMS is a free, open-source content management system built on Django, the Python web framework. It adds the things Django leaves out on purpose: a page tree, editing content directly on the page, plugins for text, images and other blocks, multilingual pages, and roles and permissions for editors. Developers keep full control of the code and templates, and editors manage the site visually without touching either.
We use it ourselves. The EmphaSoft website you are reading runs on django CMS, and this blog runs on djangocms-stories, the blog application from the django CMS ecosystem. This guide covers what django CMS is, how it works, how to host it, how blogging and templates work, and how it compares with other options if you are looking for the best CMS for Django.
What is django CMS?
Django is one of the most mature web frameworks in the Python world. It ships with an ORM, an admin interface, authentication, forms and strong security defaults. It is not a content management system, though: out of the box there are no pages that editors can create, arrange and publish on their own.
django CMS covers that part. It is a set of Django applications you install into a Django project, and the result is still an ordinary Django codebase. You can add your own models, views, APIs and business logic next to the CMS, and testing, deployment and maintenance work the same way as for any other Django application. The project is open source and community-led, and its documentation lives at docs.django-cms.org.
What a CMS does, and what django CMS adds
A content management system lets several people add, edit and publish website content without asking a developer for every change. Content sits in a database, presentation lives in templates, and permissions decide who can do what, whether that person is an administrator, an editor or an author.
On top of that, django CMS has a few ideas of its own:
- Pages are organised in a page tree, and the hierarchy drives URLs and navigation. Editors add, move and nest pages, and menus update automatically.
- Templates define named placeholders (for example "content" or "sidebar"). Editors fill them with plugins: text, images, links, buttons, forms or any custom component your developers build.
- Editing happens on the frontend. Editors work on the page itself through a toolbar and a structure view, so they see what visitors will see instead of filling in abstract forms.
- Each page can exist in several languages, with language-specific titles, URLs and content. Companies that run sites in several markets often pick django CMS for this.
- Permissions are built on Django users and groups, so you can limit who edits, who publishes and which parts of the tree each person can touch.
- Apphooks attach any Django application (a blog, a job board, a product catalogue) to a page in the tree, so custom functionality sits inside the CMS navigation.
Newer releases move some features, such as versioning and moderation workflows, into separate packages, and a project installs only the ones it needs. Check the official documentation for the current package set before you plan a project.
What django CMS is used for
django CMS fits best when a site needs editable content and real application logic at the same time:
- Corporate and marketing websites with many pages, several languages and a team of editors.
- Sites that sit next to a product, such as a SaaS marketing site that shares users, data or APIs with the application.
- Portals and directories, where content pages live alongside custom search, listings or account areas, as in customer portals.
- Content-heavy sites with custom components, where designers want a specific look and developers want reusable building blocks instead of a theme marketplace.
For a five-page brochure site that marketing will edit alone, a hosted no-code builder is usually cheaper. django CMS pays off when the website is part of a larger Python system or needs custom features.
django CMS templates: how pages get their design
People searching for a "django cms template" are often surprised that there is no theme store like WordPress has. Templates in django CMS are ordinary Django templates. A developer creates a base layout, marks editable areas with the placeholder template tag, and lists the available page templates in the project settings. Editors then pick a template per page, such as a landing layout, a two-column layout or a full-width article.
There are three common ways to get a design in place:
- Start from a starter project. The official quickstart and community starter repositories give you a working project with basic templates you can restyle.
- Use a component library. Packages such as djangocms-frontend provide ready plugins for common layout elements (grids, cards, buttons) based on a CSS framework.
- Build your own design system. This is the usual route for a brand site: designers produce components, and developers turn each one into a custom plugin with its own template and fields. Editors get only the blocks the brand allows and cannot break the layout.
The third approach needs more work up front, and in return every block is reusable, consistent and safe to edit. We built our own site this way: hero sections, service cards, contact blocks and the footer are CMS plugins or shared content that editors change without a deploy.
Blogging with django CMS
People often ask whether django CMS can run a blog. It can, through a dedicated blog application attached to the page tree with an apphook. For years most projects used djangocms-blog. In the current ecosystem its successor is djangocms-stories, which this blog uses.
A django CMS blog typically gives you:
- Posts with authors, categories, tags, publication dates and featured images.
- Post content built from the same plugins as the rest of the site, so a blog post can contain any component your pages use.
- List and detail pages, archives by category, and feeds.
- SEO fields per post (meta title and description), plus multilingual posts if your site needs them.
The blog is part of the same Django project, so you can extend it with your own logic: structured data, related-content blocks, custom templates per category, or content exports in machine-readable formats. A hosted blogging platform often won't let you make those changes at all.
Advantages and limitations
Why teams choose django CMS
- It is Django, with its security defaults, a large ecosystem of packages and a big pool of Python developers who already know the framework.
- Custom features are normal Django code. You don't end up writing plugins that fight a closed core.
- Non-technical teams pick up frontend editing and the page tree quickly.
- Language versions are a core concept and were there from the start.
- It is open source: no licence fees and no vendor lock-in, and the code and data stay yours.
What to be aware of
- You need developers. Setting up templates, plugins and deployment is development work, because this is a framework-based CMS and not a website builder.
- Upgrades take planning. Major releases have changed the architecture and moved features into separate packages. Upgrading an old project across several major versions is a real migration, so budget for it.
- The plugin ecosystem is smaller than WordPress's. Many things you would install as a ready plugin elsewhere are custom code here. That often helps quality, but it costs time.
- Caching needs care. Page caching makes django CMS sites fast, but dynamic parts such as forms and CSRF tokens have to be designed with the cache in mind.
Best CMS for Django: django CMS vs Wagtail vs Mezzanine
Three names come up most often when people search for the best CMS for Django. Roughly:
| django CMS | Wagtail | Mezzanine | |
|---|---|---|---|
| Editing style | On-page frontend editing with plugins in placeholders | Separate, polished admin with flexible content blocks (StreamField) | Classic admin-based editing |
| Content model | Page tree with templates and plugins; apphooks for custom apps | Page types defined as Python models by developers | Predefined page types and a built-in blog |
| Strengths | Visual editing, multilingual sites, mixing CMS pages with Django apps | Structured content, strong admin UX, headless use via API | Quick start for simple sites in the past |
| Status in 2026 | Actively maintained | Actively maintained | Little active development in recent years; not a good choice for new projects |
As a rule of thumb, pick django CMS if editors want to build pages visually from approved components and the site is multilingual or closely tied to other Django apps. Pick Wagtail if your content is highly structured, you plan a headless setup, or your editors prefer form-based editing in a dedicated admin. Don't start new projects on Mezzanine, and if you already have one, plan a migration. django CMS and Wagtail are both solid; which one fits depends more on your content and your editors than on technical benchmarks.
django CMS hosting: what you need
Hosting django CMS needs nothing beyond what any production Django application needs. A typical setup:
- An application server: Gunicorn or Uvicorn running the Django project, managed by systemd, a process supervisor or a container orchestrator.
- A web server or proxy, usually Nginx or a load balancer, in front to handle TLS, compression and static files.
- A database. PostgreSQL is the usual choice for production.
- Media storage for uploaded images and files, either on local disk with backups or in S3-compatible object storage.
- A cache, Redis or Memcached, for page, template and session caching. It makes a large difference to response times.
- A CDN, which is optional but useful for static files, images and cached pages, especially for international audiences.
- Backups and monitoring: daily database and media backups, error tracking and uptime checks.
All of this can run on a single virtual server, on a managed container platform, or on a Platform-as-a-Service that supports Python. A single well-configured server is enough for most company websites. Managed platforms save operations time if you don't have a DevOps person. In every case, keep deployment automated: run migrations and collect static files on every release, and test upgrades on a staging copy before production.
How to start a django CMS project
A sensible plan for a new site:
- Define content and roles: page types, reusable blocks, languages, and who edits and publishes what.
- Design components instead of whole pages. A small set of well-designed blocks covers most pages. Work this out early with your UX designers.
- Set up the project from the official quickstart, on the current supported versions of Python, Django and django CMS.
- Build plugins and templates for each component, with tests for the custom code.
- Add the apps you need: blog, forms, search, integrations with CRM or analytics.
- Plan SEO and performance from the start: meta fields, clean URLs, redirects from any old site, caching and image sizes.
- Train editors and write a short guide on which blocks to use where.
FAQ
What is django CMS in simple terms?
An open-source content management system that runs inside a Django project. Developers build templates and components in Python and Django, and editors manage pages, languages and content visually in the browser.
Is django CMS free?
Yes, it is open source. You pay for development, hosting and maintenance, but there are no licence fees.
Can django CMS be used for a blog?
Yes. A blog application such as djangocms-stories plugs into the page tree and gives you posts, categories, tags, authors and SEO fields. Post content is built from the same plugins as the rest of the site.
Where can I host a django CMS site?
Anywhere you can host a Django application: a virtual server with Nginx, Gunicorn and PostgreSQL, a container platform, or a PaaS that supports Python. For production, add a cache and media storage.
Is django CMS or Wagtail better?
It depends on the project. django CMS suits visual, component-based page building and multilingual sites. Wagtail suits structured content and headless setups with a form-based admin.
Does django CMS work with React or a headless frontend?
It is designed mainly for server-rendered pages, which are good for SEO and speed. You can still use JavaScript components inside pages or expose content through an API. If your project is fully headless, compare it with Wagtail and API-first CMS products first.
Conclusion
django CMS is a mature, open-source way to give a Django project a page tree, on-page editing, multilingual content and a blog while the code stays an ordinary Django codebase. Use it when your website needs custom functionality, several languages or a close link to a Python product, and you have developers to set it up properly. A website builder is cheaper for very simple sites, and for structured, headless content you should also look at Wagtail.
If you are planning a new site on django CMS, migrating from an older version, or choosing between Django-based CMS options for your web project, talk to the EmphaSoft team. Our own site runs on django CMS, and we can tell you what has worked for us in practice.
