Unfold 把 Django Admin 变好看了,离 CMS 还差哪几步

举报
DevUp 发表于 2026/11/12 19:52:49 2026/11/12
【摘要】 跑完 Django 教程有了后台、登录和 ORM,做内容站却还差页面树、混排编辑器和草稿工作流三道坎,Unfold 这类后台美化包也补不上。动手前先数页面类型、编辑人数和要不要走审批。

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 时挨个修补。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。