Files
awesome-python/website/data/category_intros/cms.md
T
Vinta ChenandClaude 2930319d48 docs: add CMS category intro
Explains when to pick Wagtail (developer-defined page types) versus
django CMS (editors composing pages live), based on each project's
own documentation.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-27 00:16:51 +08:00

3.2 KiB

Both Python CMS picks run on Django: Wagtail for page types your developers define, like articles, and django CMS for editors building pages on the live site.

How to choose:

  • Content types your developers define, like articles and events: Wagtail
  • Editors composing pages from reusable components on the live site: django CMS

Wagtail is not an instant website in a box: expect to write code. Start a project with wagtail start. Each page type is a Django model that inherits from Page, so give each kind of content its own type with its own fields. An event page with a date and a location can show up in a calendar, and a styled heading on a generic page can't. Use StreamField for pages without a fixed structure, like blog posts, and snippets for content that doesn't need its own page, like headers and footers. For a headless site, use its built-in API.

In django CMS, editors compose pages from plugins in a toolbar on the live site, and developers write standard Django. Each template declares its placeholders with {% placeholder %}, and CMS_TEMPLATES lists the templates editors can pick from. For a region that is the same on every page, like a footer, use {% static_alias %}, so the content is stored once. For content from your own app, ask where it lives. If it fits in a placeholder on a page, write a plugin. If it has its own list view, detail view, and URL, mount it as an app with an apphook. The core publishes as you edit, which is rarely enough for a production site with editors, so add a versioning package.

Both are built on Django. Wagtail deploys like a Django site. You can add either one to an existing Django project: Wagtail integrates into one, and django CMS doesn't make you rebuild around it. Neither fits a very small or static site. For a two-page brochure, django CMS calls itself overkill, and a static site generator is lighter.