点击上方卡片关注我
设置星标 学习更多技能
在Web开发中,内容管理系统(CMS)是构建网站的重要工具,它能让非技术人员轻松管理网站内容。Wagtail是一个基于Django框架的开源CMS,由英国数字机构Torchbox开发并维护。与传统CMS不同,Wagtail不仅提供了直观的内容编辑界面,还保持了Django的灵活性和可扩展性,让开发者能够构建高度定制化的网站。
Wagtail基于Django,因此需要先确保Python环境已安装。
推荐使用虚拟环境进行安装:
# 创建虚拟环境python -m venv wagtail_envsource wagtail_env/bin/activate # Windows: wagtail_env\Scripts\activate# 安装Wagtailpip install wagtail# 创建新项目wagtail start mysitecd mysite# 安装依赖并创建数据库pip install -r requirements.txtpython manage.py migrate# 创建超级用户python manage.py createsuperuser# 启动开发服务器python manage.py runserver安装完成后,访问 http://127.0.0.1:8000/admin 即可进入Wagtail管理后台。
在Wagtail中,页面是核心概念,每个页面都是一个Django模型。通过继承Page类,可以创建自定义的页面类型,定义页面的字段和行为。
下面的示例展示了如何创建一个博客文章页面,包含标题、日期、正文等字段:
from django.db import modelsfrom wagtail.models import Pagefrom wagtail.fields import RichTextFieldfrom wagtail.admin.panels import FieldPanelclassBlogPage(Page): date = models.DateField("发布日期") intro = models.CharField(max_length=250, verbose_name="简介") body = RichTextField(blank=True, verbose_name="正文") content_panels = Page.content_panels + [ FieldPanel('date'), FieldPanel('intro'), FieldPanel('body'), ]classMeta: verbose_name = "博客文章"StreamField是Wagtail最强大的特性之一,它允许编辑者自由组合不同类型的内容块,如文本、图片、视频、引用等。StreamField特别适合构建营销页面、产品介绍等需要丰富内容展示的场景,让编辑者无需编写代码就能创建精美的页面。
from wagtail.fields import StreamFieldfrom wagtail import blocksfrom wagtail.images.blocks import ImageChooserBlockclassFlexiblePage(Page): body = StreamField([ ('heading', blocks.CharBlock(classname="title")), ('paragraph', blocks.RichTextBlock()), ('image', ImageChooserBlock()), ('quote', blocks.BlockQuoteBlock()), ], use_json_field=True) content_panels = Page.content_panels + [ FieldPanel('body'), ]Wagtail提供了强大的图片管理系统,支持图片上传、裁剪、滤镜应用等功能。在模板中,可以使用图片标签生成不同尺寸的图片,自动优化加载性能。Wagtail的图片处理是响应式的,能够根据不同设备自动调整图片大小,提升用户体验。
# 在模型中使用图片字段from wagtail.images.models import ImageclassArticlePage(Page): header_image = models.ForeignKey('wagtailimages.Image', null=True, blank=True, on_delete=models.SET_NULL, related_name='+' ) content_panels = Page.content_panels + [ FieldPanel('header_image'), ]在模板中使用:
{% load wagtailimages_tags %}{% image page.header_image fill-800x400 %}除了使用内置的内容块,Wagtail允许开发者创建自定义的StreamField块,实现特定的业务需求。通过继承StructBlock,可以组合多个字段创建复杂的内容结构,自定义块让内容管理更加结构化,同时保持了编辑界面的友好性。
from wagtail import blocksclassPersonBlock(blocks.StructBlock): name = blocks.CharBlock(label="姓名") photo = ImageChooserBlock(label="照片") bio = blocks.TextBlock(label="简介")classMeta: template = 'blocks/person_block.html' icon = 'user' label = '团队成员'classTeamPage(Page): team_members = StreamField([ ('person', PersonBlock()), ], use_json_field=True) content_panels = Page.content_panels + [ FieldPanel('team_members'), ]Wagtail内置了搜索功能,支持全文搜索和字段过滤。通过配置search_fields,可以指定哪些字段参与搜索。Wagtail支持多种搜索后端,包括数据库搜索和Elasticsearch。
from wagtail.search import indexclassBlogPage(Page): date = models.DateField("发布日期") intro = models.CharField(max_length=250) body = RichTextField(blank=True) search_fields = Page.search_fields + [ index.SearchField('intro'), index.SearchField('body'), index.FilterField('date'), ]# 在视图中使用搜索defsearch(request): search_query = request.GET.get('query', None)if search_query: search_results = Page.objects.live().search(search_query)else: search_results = Page.objects.none()return render(request, 'search_results.html', {'search_results': search_results, })Wagtail支持多语言网站的构建,可以为同一页面创建不同语言版本。通过wagtail-localize插件,可以实现内容的翻译管理和同步。这对于面向国际市场的网站非常重要,能够为不同地区的用户提供本地化的内容体验。多语言支持包括页面内容、菜单、表单等各个方面。
# settings.py中配置WAGTAIL_I18N_ENABLED = TrueWAGTAIL_CONTENT_LANGUAGES = LANGUAGES = [ ('zh-hans', '简体中文'), ('en', 'English'),]# 在模型中使用from wagtail.models import TranslatableMixinclassMultilingualPage(TranslatableMixin, Page): body = RichTextField()classMeta: unique_together = [ ('translation_key', 'locale'), ]Wagtail是Python生态中最优秀的CMS框架之一,它完美结合了Django的强大功能和现代化的内容管理理念。通过本文的介绍,了解了Wagtail的安装方法、核心特性以及各种实用功能。从基础的页面模型创建到高级的StreamField应用,从图片管理到多语言支持,Wagtail都提供了完善的解决方案。相比传统CMS,Wagtail更加灵活、可扩展,同时保持了优秀的用户体验。掌握Wagtail,可以快速构建专业的内容管理系统,提升开发效率,是Django开发者工具箱中不可或缺的利器。
如果在编程工具充值使用上遇到麻烦,推荐一个牛逼的中转工具!一次性搞定 Codex 、Claude Code和 gemini,内容介绍和付费兑换详见文末阅读原文。


实测 4 个爆火 Skill,一句话生成画布/知识库/任务规划/自动发布
从海外公司注册到 Stripe 收款,跑通了出海收付款全流程(实操分享)
出海建站必备:告别AI味,这两个页面设计 Skills 太牛了!