Aller au contenu principal

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.

À éviter
<div hx-get="/search" hx-swap="innerHTML"></div>
Bonne pratique
<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.

7.1

Scripts

HTMX avec annonces et focus management

8.9

Landmarks

base.html avec header, main, nav, footer

11.1

Étiquetage

Forms Django avec labels et widgets a11y

11.10

Validation

Messages d'erreur associés via aria-describedby

12.7

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.

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