← Zurück zum Blog
WagtailCMS5. Mai 2026· 11 min Lesezeit

Wagtail CMS: Einführung und erste Schritte

Inhalt
  1. Was ist Wagtail?
  2. Installation
  3. Das Page Model
  4. StreamField
  5. Der Wagtail-Admin
  6. Wann Wagtail?

Wagtail ist das Django-CMS das ich für Content-intensive Projekte fast immer empfehle. Es kombiniert die volle Power von Django mit einem redakteursfreundlichen Admin und flexiblen Page-Modellen. Eingesetzt u.a. von Google, NASA und Mozilla.

Was ist Wagtail?

Wagtail ist ein Open-Source CMS auf Basis von Django. Content wird in Pages organisiert, die eine Baumstruktur bilden. Jeder Page-Typ ist ein Django-Model — du hast die volle Kontrolle über Datenstruktur und Darstellung.

Installation

pip install wagtail

# Neues Projekt erstellen
wagtail start mysite
cd mysite
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

Wagtail bringt einen eigenen Admin unter /cms/ mit. Der Django-Admin unter /admin/ bleibt weiterhin verfügbar.

Das Page Model

from django.db import models
from wagtail.models import Page
from wagtail.fields import RichTextField
from wagtail.admin.panels import FieldPanel

class BlogPage(Page):
    intro = models.TextField(blank=True)
    body  = RichTextField(blank=True)
    date  = models.DateField("Veroeffentlichungsdatum")

    content_panels = Page.content_panels + [
        FieldPanel("intro"),
        FieldPanel("body"),
        FieldPanel("date"),
    ]
    parent_page_types = ["BlogIndexPage"]
    subpage_types = []  # Keine Unterseiten erlaubt

StreamField — flexibler Content

StreamField ist Wagtails mächtigstes Feature: Es erlaubt Redakteuren, Content aus verschiedenen Block-Typen frei zusammenzustellen:

from wagtail.fields import StreamField
from wagtail.blocks import CharBlock, RichTextBlock, ImageChooserBlock, StructBlock

class ArticlePage(Page):
    body = StreamField([
        ("heading",   CharBlock()),
        ("paragraph", RichTextBlock()),
        ("image",     ImageChooserBlock()),
        ("quote", StructBlock([
            ("text",        CharBlock()),
            ("attribution", CharBlock(required=False)),
        ])),
    ], use_json_field=True)

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

Im Template iterierst du einfach über die Blöcke: {% for block in page.body %}{% include_block block %}{% endfor %}

Der Wagtail-Admin

Wann Wagtail, wann nicht?

Ideal wenn Redakteure ohne Programmierkenntnisse Content pflegen müssen, die Struktur flexibel und hierarchisch ist, und du Django bereits kennst.

Weniger geeignet für reine APIs ohne Admin — dort ist DRF die bessere Wahl.

Yevhen Chubchyk
Yevhen Chubchyk
Senior Python / Django Entwickler · Freelancer seit 2016 · 20+ Jahre IT-Erfahrung. Kunden: Siemens Healthineers, Engie, natureOffice u.a.