打开 PyPI 上老牌 Python CMS 项目 Mezzanine 的页面,最新正式版 6.1.1(2025 年 6 月)的依赖栏写着一行硬约束:django<5,>=2.2;再点开它 GitHub 仓库里挂着的官网域名 mezzanine.jupo.org,已经直接跳回代码仓库,早年用过的 mezzanine.me 则在域名商页面挂牌出售。而在 Django Issues 和社区讨论里,凡是有人问起"现在新开 Python 内容站该用什么",高赞回答几乎清一色指向同一个名字:Wagtail。

一个曾经装机量名列前茅的 Python CMS 停在 Django 4 的时代的门槛外,社区把新项目的接力棒交给了 Wagtail——这一幕,差不多就是整个 Python CMS 生态的缩影。

整个 Python CMS 生态都围绕 Django 框架运转,跟 PHP 的"WordPress 一家独大"、Node.js 的"Headless 集群"走的完全是两码事。先看清三条底层规则,再去挑系统才不会踩空。

Python CMS 的三条规则

一、Python CMS 几乎等于 Django CMS。 你能叫得上名的 Python CMS——Wagtail、django CMS、Mezzanine、CodeRed CMS——全部长在 Django 框架上。

原因很实在:Django 自带 ORM、管理后台、模板引擎和用户认证系统,天生配齐了 CMS 的地基,不用从零造轮子。PHP 那边 WordPress、Drupal、Grav 各自维护一套底座;Python 这边统一走 Django,一个框架养活了整个 CMS 生态。

二、没有"WordPress 级"的绝对主力。 W3Techs 统计里,WordPress 占了已知 CMS 站点的 58.7%、全网网站的 40.2%,而 Python 系排最前的 Wagtail 在全网占比还不到 0.1%。

Python 的 CMS 用户基数本来就小。PHP 开发者建站的第一反应往往是装套现成的 WordPress,Python 开发者遇到建站需求,很多时候直接拿 Django 手写,根本不装 CMS。

三、结构化内容是 Python CMS 的看家本领。 Wagtail 的 StreamField 和 django CMS 的插件树,走的都是"结构化内容建模"路线:把页面拆成可复用的结构化内容块,跟 WordPress 早年"标题加一整个富文本框"的思路大相径庭,更接近 Drupal 的 Field 体系,但写起来轻快得多。

Wagtail(BSD-3-Clause,最新正式版 8.1/2026-10)

Python CMS 生态的头牌。它由英国数字机构 Torchbox 在 2014 年开源(最初是给英国皇家艺术学院改版官网时孵化出来的系统),如今由 Torchbox 与核心团队维护,并通过 Django Software Foundation 接受专项赞助。最新正式版 8.1 于 2026 年 10 月 6 日发布,要求 Django 5.2 及以上(正式支持到 Django 6.1 与 Python 3.15),并加入了基于 django-tasks 的后台任务机制。

协议:BSD-3-Clause 宽松开源协议,改了代码拿去商用或闭源分发都合法,不像 GPL 那样带传染性条款。官方也没有"社区版/企业版"的功能切割,所有代码全在一个仓库里。

核心能力:

  • StreamField:编辑时像搭积木一样组合文本、图片、引用、视频或自定义块,前端按块类型走不同模板。它比 WordPress 的 Gutenberg 早好几年,且块数据以结构化 JSON 落库,不往正文塞 HTML 注释。
  • 贴合 Django 的开发方式:自带独立的编辑后台(wagtail.admin,替代原生 Django Admin 界面),底层完全复用 Django ORM;页面继承 Page 类,字段按 Model 定义,会 Django 就能快速上手。
  • 图像处理:内置 rendition 系统,支持按模板标签自动裁剪、缩放及转成 AVIF、WebP 格式;focal_point(焦点区域)可在自动裁剪时保住画面主体。
  • 搜索:内置数据库全文检索(PostgreSQL FTS、SQLite FTS5 等)与 Elasticsearch(支持 7、8、9 版本)两套后端,改一行 WAGTAILSEARCH_BACKENDS 即可切换。
  • Headless:内置 wagtail.api.v2 提供只读 JSON REST API,8.0 起又引入新一代 wagtail.api.v3 预览模块,前端可接 Next.js、Nuxt 或 Astro;社区另有 wagtail-grapple 提供 GraphQL 接口。

适合什么场景:

  • 新闻媒体、高校与公共机构门户:官方公布的用户名单里有 NASA(含喷气推进实验室 JPL)、Google(Google Blog 等内容站)、英国国家医疗服务体系(NHS)、麻省理工学院(MIT)、Mozilla,以及美国中情局(CIA)的 World Factbook。
  • 需要严密内容结构的项目:如果页面由十几种模块自由拼装而成,StreamField 既能给编辑留出排版自由,又能锁死前端 HTML 结构。
  • 团队里有 Django 开发者的项目:没有额外的模板语言和奇特配置,写起来就是标准 Django 工程。

不适合什么场景:

  • 个人博客:Wagtail 的部署和日常升级成本比 WordPress、Ghost 高得多,拿它搭个人博客过于沉重。
  • 电商:Wagtail 管的是内容与页面,重交易的商城在 Python 栈里该看 Saleor 或 django-oscar。
  • 不懂代码的人:装好 Wagtail 只有一个空白起始页,没有"后台点几下换主题"的商店,每加一种页面类型都要写 Python 代码和 HTML 模板。

生态与对比:主题和现成插件的数量远不如 WordPress,但常用扩展齐备,多语言有官方维护的 wagtail-localize,菜单管理有 wagtailmenus,媒体文件有 wagtailmedia,社区还维护了一份 Awesome Wagtail 清单。它在 Python 里的身位很像 Drupal 在 PHP 里的位置——架构扎实、大机构爱用、个人站长嫌重,但学习曲线比 Drupal 平缓得多。

团队里只要有懂 Django 的程序员,想做企业官网、高校或机构门户、多级审核的内容平台,在 Python 技术栈里直接装 Wagtail 就够了。


本篇数据来源(版本与统计截至 2026-11-03):

  • Mezzanine PyPI 页面与官方仓库(最新正式版 6.1.1 依赖 django<5,>=2.2):https://pypi.org/project/Mezzanine/ 、https://github.com/stephenmcd/mezzanine
  • W3Techs WordPress 市场份额统计(占已知 CMS 站 58.7%、全网 40.2%):https://w3techs.com/technologies/details/cm-wordpress
  • W3Techs Wagtail 市场份额统计(占全网不到 0.1%):https://w3techs.com/technologies/details/cm-wagtail
  • Wagtail 官网(BSD-3-Clause,核心特性与机构案例):https://wagtail.org/
  • Wagtail 官方关于页(Torchbox 2014 年开源沿革与 DSF 赞助说明):https://wagtail.org/about-wagtail/ 、https://wagtail.org/sponsor/
  • Wagtail 官方用户名单与案例页(NASA、Google、NHS、MIT、Mozilla、CIA 等):https://wagtail.org/who-uses-wagtail/
  • Wagtail 官方仓库(BSD-3-Clause):https://github.com/wagtail/wagtail
  • Wagtail 8.1 官方发布说明(2026-10-06 发布,支持 Python 3.15、Django 5.2+ 与后台任务):https://docs.wagtail.org/en/stable/releases/8.1.html
  • Wagtail 搜索后端官方文档(Database FTS 与 Elasticsearch 7/8/9):https://docs.wagtail.org/en/stable/topics/search/backends.html
  • Wagtail 官方 Headless 页面与 API v3 文档:https://wagtail.org/headless/ 、https://docs.wagtail.org/en/stable/advanced_topics/api/v3/index.html
  • Wagtail 社区常用扩展与清单:https://pypi.org/project/wagtail-localize/ 、https://pypi.org/project/wagtailmenus/ 、https://github.com/springload/awesome-wagtail
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐