Wagtail 扩展 HomePage 模型(一个简单的 例子)
开箱即用。 "home" 应用在 models.py 中定义了一个空白的 HomePage 模型,同时通过迁移创建了主页并配置 Wagtail 使用该页面。
按以下方式编辑 home/models.py,为模型添加 body 字段:
from django.db import modelsfrom wagtail.models import Page
from wagtail.fields import RichTextFieldclass HomePage(Page):body = RichTextField(blank=True)content_panels = Page.content_panels + ["body"]
body 是一个 RichTextField,这是 Wagtail 中的特殊字段类型。当设置 blank=True 时,表示该字段不是必填项,可以留空。您可以使用任何 Django 核心字段类型。content_panels 用于定义编辑界面的功能和布局,将字段添加到 content_panels 后即可在 Wagtail 管理界面中对这些字段进行编辑。您可以在 Page models 文档中相关信息。
请运行:
# Creates the migrations file.
python manage.py makemigrations# Executes the migrations and updates the database with your model changes.
python manage.py migrate
每次对模型定义进行更改后,都必须运行以下命令。终端预期输出如下:
Migrations for 'home':home/migrations/0003_homepage_body.py- Add field body to homepage
Operations to perform:Apply all migrations: admin, auth, contenttypes, home, sessions, taggit, wagtailadmin, wagtailcore, wagtaildocs, wagtailembeds, wagtailforms, wagtailimages, wagtailredirects, wagtailsearch, wagtailusers
Running migrations:Applying home.0003_homepage_body... OK
您需要更新页面模板以反映对模型所做的更改。Wagtail 使用标准的 Django 模板来渲染每种页面类型。默认情况下,它会根据应用和模型名称寻找模板文件,并将大写字母转换为下划线分隔的形式。例如,"home" 应用中的 HomePage 会对应 home/home_page.html 模板文件。该模板可以存放在 Django 模板规则识别的任何位置,按照惯例通常放置在应用的 templates 文件夹内。
请编辑 home/templates/home/home_page.html 文件,并包含以下内容:
{% extends "base.html" %}<!-- load wagtailcore_tags by adding this: -->
{% load wagtailcore_tags %}{% block body_class %}template-homepage{% endblock %}<!-- replace everything below with: -->
{% block content %}{{ page.body|richtext }}
{% endblock %}
base.html
指代父级模板。它必须始终作为模板中使用的第一个模板标签。继承此模板可以避免重复编写代码,并让应用中的所有页面共享统一的框架。通过在子模板中使用块标签(block tags),您可以覆盖父模板中的特定内容。
同时,必须在模板顶部加载 wagtailcore_tags
,以便使用 Wagtail 提供的附加标签(这些标签是对 Django 原有标签的扩展)。
Wagtail 模板标签
除了 Django 的模板标签和过滤器外,Wagtail 还提供了许多自有的模板标签和过滤器。您需要在模板文件顶部通过 {% load wagtailcore_tags %}
来加载这些功能。
本教程使用 richtext 过滤器来转义并输出 RichTextField 的内容:
{% load wagtailcore_tags %}
{{ page.body|richtext }}
输出效果:
<p>Welcome to our new site!</p>
注意:每个使用 Wagtail 标签的模板都必须包含 {% load wagtailcore_tags %}
。如果未加载这些标签,Django 会抛出 TemplateSyntaxError 异常。