Unfold 把 Django Admin 变好看了,离 CMS 还差哪几步
Django 官方教程从 startproject 一路带到第七章,终点是一个带后台的投票应用:模型、迁移、管理后台、表单、登录,样样齐备。很多 Python 开发者跑到这一步,会觉得再建几张表、多写几个视图,就能自己搭出一个内容站。
把教程终点交到你手里的东西,跟 Wagtail、django CMS 开箱自带的组件摆在一起逐项对账,少掉的那一截正好都在「内容怎么组织、谁来改、怎么发出去」这三层上。
教程终点已经交给你什么
跟着官方教程和 django.contrib 自带模块走完,项目里已经现成备好了七样东西:
- 用户与权限:
django.contrib.auth自带用户、组、权限模型,登录和鉴权直接能用; - 管理后台:
django.contrib.admin照着数据模型自动生成增删改查界面; - 数据层:ORM 加迁移,改字段不用手写 SQL;
- 表单与校验:表单框架管渲染、字段校验和错误提示;
- 模板与静态文件:模板继承、
staticfiles收集都有现成方案; - 国际化:i18n 框架管界面文字的多语种翻译;
- 站点地图与 RSS:
sitemaps与syndication配好就出sitemap.xml和 feed。
这七样够跑起一个标准 Web 应用。一旦需求从「管数据库记录」变成「管一个网站的内容」,下面三道坎就会挨个冒出来。
第一道坎:Django 没有「页面」这个模型
Django 的路由是 URL 指向视图函数、视图渲染模板,一个网页就是一次函数调用。内容站要的「页面」得是数据库里的一等公民:
- 有标题、有 URL 别名(slug)、有发布状态,存在表里而不是写死在
urls.py; - 有父子层级:首页下面是栏目,栏目下面是文章,面包屑能顺着层级自动算出来;
- 有导航菜单:菜单跟着页面树走,挪动页面位置不用改模板代码;
- 编辑创建页面时,能自己挑用哪套页面模板。
Wagtail 的做法是让所有页面模型继承内置的 Page 类,底层用 django-treebeard 维护整棵页面树;django CMS 则按父子页面树组织站点,在模板里留占位槽(Placeholder)往里塞插件,并靠内置菜单系统自动生成多级导航。两边路径不同,但页面树这套底座都是 CMS 直接给的,裸写 Django 一行不带。
自己从头写一套树形页面模型加动态路由,每个新项目都得从 urls.py 重搭一遍。
第二道坎:编辑器差着一代
Django Admin 里的长文本字段,默认就是一个 <textarea>。装个富文本插件能解文字加粗和插图,但内容站日常高频要用的三样东西,还在更深的地方:
- 图片裁切与构图焦点:Wagtail 内置
rendition按模板标签自动生成方图、横图和 WebP 副本,还能标焦点区域(focal point)防裁掉人头;裸写得自己接图像库管缓存。 - 多块混排的结构化内容:Wagtail 的
StreamField把正文、大图、引言、视频做成可组合的 JSON 块,按块出表单;裸写要么往富文本框硬塞 HTML,要么拆七八张表加外键。 - 前台直编:django CMS 提供前台工具栏,编辑打开网页就能双击改字、拖放组件调版式。原生 Django Admin 只管后台表单,没有前台编辑这一层。
编辑器里还有拖拽排序、撤销重做、富文本粘贴清洗这些细碎功夫,单拎哪一项都能写,凑齐就得长期填坑。
第三道坎:保存不等于发布
Django Admin 的保存按钮按下去,改完的记录当场写进数据库,前台立刻变样。而多人维护的内容站,日常动作往往卡在「写完」和「上线」之间:
- 草稿与预览:改了一半的页面先存草稿,线上访客看到的仍是旧版,编辑自己能先点开预览看效果;Wagtail 7.0 起还支持存草稿时跳过必填项校验,等到真正发布或提审时再拦截。
- 自动保存与并发提醒:Wagtail 7.3 起在编辑器里内置了自动保存(
WAGTAIL_AUTOSAVE_INTERVAL),并结合并发编辑提醒防止两个人互相覆盖。 - 定时发布与下线:设定某篇内容在周四早上八点自动上线,或活动结束自动撤下。
- 多级审批工作流:作者交稿、编辑初审、主编放行。Wagtail 内置工作流(8.0 起 API v3 亦可管);django CMS 5.1 脚手架可勾选
versioning与moderation。
裸写 Django 要补齐草稿、历史版本回滚和多人审批,得自己找第三方包往模型上绑状态机,升一次 Django 大版本还要跟着修一轮兼容。
Admin 美化包补的是哪一段
很多人不想装整套 CMS,会把目光投向 Django Admin 增强工具:Unfold(MIT,最新正式版 0.110.1/2026-11)用 Tailwind CSS 把后台重做成现代界面,Django Grappelli(BSD-3-Clause,最新正式版 5.0.1/2026-10)则是老牌的后台皮肤与交互扩展。
这类工具解决的是原生后台不好看、筛选项不好摆的问题。它们改的是 Django 本来就有的那层后台外壳;至于前面说的页面树、结构化块编辑、图片焦点裁切、草稿预览和审批流,一概不在它们的射程里。给裸写项目装上 Unfold,拿到的是一个漂亮的后台管理界面,仍然不是 CMS。
动手前数三件事
要不要装 CMS,不用凭感觉猜,照着下面三条对一遍:
- 整站只有文章列表加两三个固定说明页,写稿和发布全是你一个人,点了保存直接上线也没关系:裸写 Django 配个 Markdown 字段或装个 Unfold 就够用,前面列的缺口你大概率撞不上。
- 页面类型超三种、编辑不止一人、或上线前要预览和审批:沾上一条,第二到第四节那堆轮子就得有人造。直接上 Wagtail 或 django CMS,把精力留给模板和业务代码。
省掉的不只是第一次搭站的那几周。Wagtail 8.1 与 django CMS 5.1 都已跟进到 Django 5.2 LTS 至 6.1 这条版本线,那些编辑器、图片裁切和工作流组件会由上游团队跟着框架大版本一起升级,不用你自己在每次升 Django 时挨个修补。
- 点赞
- 收藏
- 关注作者
评论(0)