Blocs StreamField

wagtail-dsfr fournit une collection de blocs StreamField adaptés au DSFR pour composer vos pages sans réinventer les composants.

Ajouter les blocs à vos pages

wagtail-dsfr utilise un système de DynamicStreamField qui permet d’ajouter automatiquement tous les blocs DSFR sans avoir à les importer manuellement. Les blocs disponibles sont chargés dynamiquement via un système de registre.

from wagtail_dsfr.content_manager.abstract import SitesFacilesBasePage

class ContentPage(SitesFacilesBasePage):
    # Les champs hero et body sont déjà définis dans SitesFacilesBasePage
    # avec tous les blocs DSFR disponibles
    pass

La classe SitesFacilesBasePage fournit :

  • hero : variantes d’en-têtes (bandeau, image + texte, fond héro)

  • body : alertes, accordéons, cartes, tableaux, boutons, listes, etc.

Ajouter vos propres blocs

Pour ajouter vos blocs personnalisés aux blocs DSFR existants, utilisez le décorateur @register_common_block :

# Dans votre fichier blocks.py
from wagtail import blocks
from wagtail_dsfr.content_manager.registry import register_common_block

@register_common_block
class CustomBlock(blocks.StructBlock):
    title = blocks.CharBlock(label="Titre")
    content = blocks.RichTextBlock(label="Contenu")
    
    class Meta:
        label = "Mon bloc personnalisé"
        icon = "edit"

Vos blocs personnalisés seront automatiquement ajoutés aux pages qui utilisent DynamicStreamField ou héritent de SitesFacilesBasePage.

Et les migrations dans tout ça ?

L’objectif du DynamicStreamField est de s’appuyer sur un callable plutôt que sur une liste statique de blocs.
De ce fait, aucune migration n’est générée via l’utilisation de cette technique.