Что такое Wagtail

Wagtail — система управления контентом на Django. Редакторам он даёт дерево страниц, предпросмотр, версии и отложенную публикацию. Разработчик пишет обычные модели Django, наследующие Page, и шаблоны.

Дерево страниц: у каждой страницы своя модель и шаблон
Дерево страниц: у каждой страницы своя модель и шаблон
ВопросОтвет в Wagtail
Где URL?путь по дереву страниц
Где структура?модель и её панели
Где внешний вид?шаблон страницы

Создание проекта

bash
pip install wagtail
wagtail start mysite
cd mysite
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

wagtail start создаёт проект с приложениями home и search. Админка Wagtail находится по адресу /admin/.

💡 Wagtail — обычный проект Django: settings.py, urls.py, миграции и ORM работают так, как вы привыкли.

Модели страниц и дерево

python
# blog/models.py
from django.db import models
from wagtail.admin.panels import FieldPanel
from wagtail.fields import RichTextField
from wagtail.models import Page

class BlogPage(Page):
    date = models.DateField("Post date")
    intro = models.CharField(max_length=250)
    body = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel("date"),
        FieldPanel("intro"),
        FieldPanel("body"),
    ]

content_panels задаёт форму редактора. Где может находиться страница, ограничивают parent_page_types и subpage_types:

python
# blog/models.py
from wagtail.models import Page

class BlogIndexPage(Page):
    subpage_types = ["blog.BlogPage"]