Philosophy

django CMS is designed around a simple guiding idea: complex publishing requirements are best addressed through small, composable building blocks.

In django CMS, those building blocks are primarily Django applications and content plugins. Rather than introducing a separate abstraction layer, the CMS builds directly on Django’s application model and extends it with tools for structured, editable content.

This approach allows projects to remain recognisably Django projects while gaining powerful content management capabilities.


A small, stable core

The core of django CMS has a deliberately limited scope. Its main responsibilities are to:

  • manage pages and their hierarchical structure

  • provide placeholders where content can be edited

  • integrate editing capabilities into rendered pages

  • coordinate plugins and application integration

By keeping the core focused, django CMS remains stable and predictable. Most project-specific functionality lives outside the core, in Django apps and plugins.


Applications as building blocks

django CMS treats Django applications as first-class building blocks for structuring a site.

They can provide front-end editable models that contain CMS content.

Through the use of apphooks, applications can be attached to parts of the page tree, allowing them to:

  • define their own URL structures

  • handle requests using standard Django views

  • coexist alongside CMS-managed pages

This makes it possible to combine traditional Django applications with CMS-managed content in a single, coherent site, without forcing either into an unnatural role.


Plugins for content composition

While applications provide functionality and behaviour, plugins are used to compose content.

Plugins represent small, focused pieces of content or presentation that can be placed inside placeholders on a page. They can be:

  • combined and nested to build complex layouts

  • reused across pages

  • extended or customised by developers

This plugin-based approach allows editors to assemble pages visually, while developers retain control over structure, data, and behaviour.


Advanced functionality through CMS extensions

More advanced publishing requirements — such as content versioning, editorial or moderation workflows — are addressed through CMS extensions rather than by expanding the core system.

This ensures that projects can adopt additional capabilities when needed, without imposing unnecessary complexity on simpler use cases.

CMS extensions advertise their capabilities. Other Django applications or plugin packages can sign up to use them.


Alignment with Django

django CMS is designed to integrate naturally into Django projects, rather than replacing or abstracting away Django itself.

It builds directly on Django concepts such as:

  • applications and URL routing

  • authentication and permissions

  • models, migrations, and views

  • the Django admin

As a result, CMS-managed content and custom application logic can coexist cleanly, and developers can apply familiar Django patterns and tooling throughout a project.


Implications for projects

This design philosophy leads to several practical outcomes:

  • django CMS can be introduced incrementally into existing Django projects

  • applications and CMS pages can evolve independently

  • long-term maintenance and upgrades are easier to manage

  • editors gain flexible content tools without being exposed to unnecessary application complexity

The rest of the Explanation section explores how these principles are applied in areas such as plugins, apphooks, publishing, permissions, and multilingual content.