Rustango CMS : un CMS de style Wagtail en Rust
Un système de gestion de contenu bâti sur Rustango qui porte vers Rust l'arborescence de pages, le StreamField, les snippets et les rendus d'images de Wagtail — multi-tenant, typé et rapide.
Rustango m'a donné Django en Rust. La question naturelle qui suivait était celle que les développeurs Django posent toujours une fois les modèles en place : où est Wagtail ? Wagtail est le système de gestion de contenu qui transforme un projet Django en quelque chose qu'une équipe marketing peut réellement piloter - une arborescence de pages, du contenu structuré riche, une médiathèque et une interface d'édition que les non-développeurs adorent.
Rustango CMS est cette couche pour Rustango : un CMS de style Wagtail qui porte l'arborescence de pages, StreamField, les snippets et les rendus d'images vers Rust - multi-tenant et à typage sûr de bout en bout.
Les pages comme modèles typés
Chaque type de page est une structure Rust qui dérive à la fois Model et PageType. Les champs de la structure deviennent le formulaire éditable dans l'admin via des widgets de champ ; la page vit dans une arborescence (cms_page) tandis que ses données typées vivent dans une table d'extension. Vous déclarez les parents et enfants autorisés, le template et une icône - et le CMS met en place le routage, le fil d'Ariane et l'éditeur.
#[derive(Model, PageType, Default, Serialize, Deserialize)]
#[rustango(table = "blog_post_ext", app = "blog")]
#[page_type(
type_name = "BlogPost", template = "blog_post.html", icon = "article",
allowed_parents(BlogIndex),
)]
pub struct BlogPost {
#[rustango(primary_key)]
pub id: Auto<i64>,
#[rustango(fk = "cms_page", on = "id", unique)]
pub page_id: i64,
#[field(widget = RichText, label = "Intro")]
pub intro: String,
#[field(widget = Stream, allowed(heading, paragraph, image, code, quote))]
pub body: Option<String>,
}
StreamField : du contenu structuré, pas une soupe de HTML
Le moteur de blocs est la meilleure idée de Wagtail : au lieu d'un grand champ de texte enrichi, le contenu est un flux ordonné de blocs typés - un titre, un paragraphe, une image, un exemple de code, une citation, ou un bloc personnalisé que l'on enregistre soi-même. Les rédacteurs composent les pages à partir de blocs de construction ; les templates rendent chaque bloc avec son propre fragment. L'article que vous lisez est un StreamField.
Snippets, une bibliothèque de médias et de vraies déclinaisons d'images
Le contenu réutilisable qui n'est pas une page - auteurs, catégories, l'identité de marque d'un site - vit sous forme de snippets dans une bibliothèque, avec dossiers, recherche, révisions et traductions. Les images passent par une médiathèque avec des renditions à la demande : demandez une taille et un format, et le CMS redimensionne, recadre selon un point focal et ré-encode en WebP ou AVIF, en mettant le résultat en cache.
{# Images réactives, au format négocié, directement depuis un template #}
{{ rcms_picture(media_id=hero, filters=["fill-1200x630"],
formats=["avif", "webp"], alt=page.title) | safe }}
Le SEO, l'i18n et la multi-location sont inclus en standard
Chaque page porte des champs SEO et Open Graph, et un unique assistant de template émet les balises canonical, description, OG et Twitter-card ; un sitemap est servi automatiquement. L'administration est entièrement localisée, le contenu peut être traduit par locale, et - parce qu'elle est bâtie sur Rustango - un seul déploiement sert de nombreux locataires, chacun avec sa propre base de données, ses pages, son thème et ses médias.
Un CMS est une promesse faite aux personnes qui ne sont pas ingénieures : celle de pouvoir modifier le site sans ouvrir de ticket. Rustango CMS tient cette promesse dans un langage qui oublie généralement que ces personnes existent.
Où cela va
Rustango CMS fait déjà tourner ce blog - l'arbre des pages, les corps en StreamField, les images de couverture générées, les balises SEO et le contenu par locale en proviennent tous. C'est la preuve que Rust n'oblige pas à renoncer à l'expérience d'édition qui a rendu Django et Wagtail si productifs. Vous pouvez avoir l'ergonomie et les garanties.