Makina Blog

Le blog Makina-corpus

Comment ajouter un CMS dans un Django existant avec Wagtail?


Wagtail permet d'ajouter facilement du contenu éditorial dans une application métier Django déjà en ligne.

Ajouter du contenu éditorial dans une application métier est une fonctionnalité souvent demandée, qui doit être pensée dès la conception. Heureusement, Wagtail permet de le faire facilement pour une application Django déjà en ligne.

Wagtail est un CMS (système de gestion de contenu) basé sur Django qui a l'avantage de s'intégrer très facilement dans n'importe quel projet. La manière habituelle d'installer Wagtail est de créer un site de zéro grâce à la commande `startsite` intégrée à Wagtail. Ainsi, un projet Django de zéro va être créé, mais malheureusement pour l'installer dans un projet déjà existant il n'existe pas de commande. Plusieurs petites choses nécessitent une attention particulière, que nous verrons dans cet article.

Je ne parlerai pas dan cet article de comment utiliser Wagtail en détail, mais uniquement de la configuration à faire pour l'intégrer dans un projet déjà existant.

Installation et configuration

La première étape est bien sur d'installer Wagtail :

pip install wagtail

Puis d'ajouter les nouvelles app au setting `INSTALLED_APPS` :

INSTALLED_APPS = [
    [...]
    'wagtail.contrib.forms',
    'wagtail.contrib.redirects',
    'wagtail.embeds',
    'wagtail.sites',
    'wagtail.users',
    'wagtail.snippets',
    'wagtail.documents',
    'wagtail.images',
    'wagtail.search',
    'wagtail.admin',
    'wagtail',
    'modelcluster',
    'taggit',
    [...]
]

Il faut ensuite s'assurer que certains settings soient bien présents :

MIDDLEWARES = [
    [...]
    'wagtail.contrib.redirects.middleware.RedirectMiddleware',
    [...]
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
WAGTAIL_SITE_NAME = 'My Example Site'

Il suffit ensuite de rajouter les urls utilisées par Wagtail :

from django.urls import path, re_path, include

from wagtail.admin import urls as wagtailadmin_urls
from wagtail.core import urls as wagtail_urls
from wagtail.documents import urls as wagtaildocs_urls

urlpatterns = [
    [...]

    # URL privée de l'administration de Wagtail
    path('admin_cms/', include(wagtailadmin_urls)),

    # URL publique d'où les fichiers téléchargés dans les pages Wagtails seront accessibles
    path('documents/', include(wagtaildocs_urls)),

    # URL publique contenant le site Wagtail
    re_path(r'^blog/', include(wagtail_urls)),

    [...]
]

Ne pas oublier de créer les tables spécifiques à Wagtail :

./manage.py migrate

Vous pouvez maintenant créer vos modèles de Page et vos templates.

Premières pages

Tout d'abord il faut rajouter une page qui sert de racine au site, la page créée par défaut n'ayant aucun champ supplémentaire. Une fois cette page en place, vous devez créer un nouveau site Wagtail par défaut (disponible dans le menu `Paramètres / Sites`) avec cette page en racine pour afficher votre contenu depuis l'URL précédemment configurée.

Tout est prêt pour rajouter du contenu. À vous de jouer !

Retrouvez nos Formation Django ainsi que nos Réalisations Django.

Formations associées

Formations Django

Formation Django avancé

À distance (FOAD) Du 17 au 21 mars 2025

Voir la Formation Django avancé

Formations Django

Formation Django avancé

À distance (FOAD) Du 17 au 21 mars 2025

Voir la Formation Django avancé

Formations Django

Formation Django intégration

À distance (FOAD) 22 janvier 2025

Voir la Formation Django intégration

Actualités en lien

Drupal : un CMS pas comme les autres

11/01/2019

Mais moi je l'aime, c'est pas de ma faute…

Voir l'article
Image
Logo Drupal

Presentation of the latest Django CMS: Wagtail

18/07/2016

Wagtail is a quite recent Django CMS. However, its young age does not keep it from having a lot of features, which we will discover in this post.

Voir l'article
Image
Django_wagtail

Présentation de Wagtail, le dernier CMS Django

03/06/2016

Wagtail est un CMS relativement récent dans l’écosystème Django. Pour autant, son jeune âge ne l’empêche pas de posséder de nombreuses fonctionnalités que nous découvrirons dans cet article.

Voir l'article
Image
back office

Inscription à la newsletter

Nous vous avons convaincus