Accessibilité RGAA avec Django : le guide Python
Django est le framework Python historique pour applications web, utilisé par Instagram, Mozilla, The Washington Post et de nombreuses administrations publiques. Son orientation server-rendered, son système de templates robuste et Django Admin en font un choix apprécié pour les projets à forte exigence. Ce guide couvre Django 5, les widgets de forms, le rendu accessible des templates, l'admin a11y et les patterns HTMX de plus en plus utilisés en Django.
Django dans le secteur public français
Django est très présent dans les administrations publiques françaises et européennes (data.gouv.fr, API Gouv, etc.), qui doivent respecter le RGAA à 100%. Le framework facilite l'accessibilité grâce à son approche server-side et ses widgets de forms relativement sémantiques, mais demande une vigilance sur les personnalisations.
500k+
Applications Django actives
Majoritairement Django
Administrations FR/EU
Partiellement a11y
Django Admin built-in
En Bref : L'essentiel à retenir
- Framework : Django nécessite une attention particulière à la sémantique HTML.
- Point Critique : Gestion du focus lors de la navigation dynamique.
- Outil Recommandé : django-crispy-forms.
- Critères RGAA clés : 7.1, 8.9, 11.1.
Erreurs Fréquentes avec Django
Widgets forms sans labels custom
Les forms Django génèrent des labels automatiques mais leur ordre et style ne sont pas toujours optimisés pour les lecteurs d'écran.
Template {% if %} cassant la sémantique
Les conditions Django peuvent générer des structures HTML invalides : ouverture de balise sans fermeture, h2 après h4, etc.
Django Admin complexité
L'admin Django est partiellement accessible mais ses widgets datepicker, autocomplete et filter_horizontal ont des problèmes connus.
HTMX sans aria-live
Les interactions HTMX (hx-swap, hx-trigger) modifient le DOM sans annoncer le changement, cassant l'UX pour les lecteurs d'écran.
<div hx-get="/search" hx-swap="innerHTML"></div><div hx-get="/search" hx-swap="innerHTML" aria-live="polite"></div>Messages framework non annoncés
Le framework messages Django est rendu dans le template mais sans aria-live, il n'est pas annoncé aux utilisateurs de lecteurs d'écran.
Bonnes Pratiques Django
base.html structuré
Créez un template base.html avec header, main, nav, footer et un skip link. Étendez-le depuis toutes vos vues via {% extends %}.
django-crispy-forms
Package populaire qui facilite le rendu accessible des forms Django avec Bootstrap 5 ou Tailwind, en générant automatiquement labels et messages d'erreur.
Widgets custom accessibles
Surchargez les widgets Forms pour ajouter aria-describedby sur les champs avec help_text et aria-invalid en cas d'erreur.
HTMX avec hx-target focus
Combinez hx-swap avec des event listeners HTMX qui déplacent le focus sur le conteneur mis à jour et définissent aria-live.
django-axe-core ou pa11y CI
Intégrez des audits d'accessibilité automatisés dans votre pipeline CI, avant chaque déploiement.
Critères RGAA clés pour Django
Ces critères du référentiel RGAA sont particulièrement importants pour les sites Django.
Scripts
HTMX avec annonces et focus management
Landmarks
base.html avec header, main, nav, footer
Étiquetage
Forms Django avec labels et widgets a11y
Validation
Messages d'erreur associés via aria-describedby
Lien d'évitement
Skip link dans base.html
Checklist accessibilité Django
Vérifiez ces points essentiels avant de mettre votre site Django en production.
- base.html avec landmarks HTML5
- Skip link en début de body
- django-crispy-forms ou widgets a11y custom
- Messages framework dans div role="status"
- HTMX avec aria-live sur les containers
- Django Admin testé si multi-utilisateurs
- Autocomplete et datepicker audités
- Focus visible dans static CSS
- CI avec pa11y ou axe-cli
- Tests avec pytest-django + axe
Questions Fréquentes sur Django et l'accessibilité
Django est-il adapté aux sites RGAA conformes ?
Oui. Le server-side rendering de Django est naturellement favorable à l'accessibilité. Les outils comme django-crispy-forms et HTMX permettent de construire des applications dynamiques tout en respectant le RGAA.
Django Admin est-il accessible ?
Partiellement. Les formulaires basiques sont corrects, mais certains widgets (filter_horizontal, datepicker, autocomplete) ont des problèmes connus. Si vos utilisateurs internes ont besoin d'a11y, envisagez de personnaliser ou remplacer certains widgets.
Comment rendre HTMX accessible ?
Ajoutez aria-live="polite" sur les conteneurs cible de swap, déplacez le focus après les swaps avec des event listeners JavaScript, et utilisez hx-indicator avec role="status" pour annoncer le chargement.
Outils Recommandés pour Django
django-crispy-forms
Package Python pour rendre les forms Django avec un meilleur contrôle sur la structure HTML et l'accessibilité.
HTMX
Bibliothèque JavaScript minimaliste utilisée avec Django pour créer des interactions dynamiques accessibles.
Pa11y CI
Intégrez Pa11y dans vos GitHub Actions pour auditer votre site Django à chaque déploiement.
Scanner RGAA Checker
Auditez votre application Django contre les 106 critères RGAA 4.1.
Auditez votre site Django gratuitement
Vérifiez si votre application respecte les 106 critères RGAA en moins de 30 secondes.
Lancer un audit RGAA gratuit