Django >= 1.11 : faire des widgets de formulaires sur mesure
Les « widgets » sont les composants affichés dans les formulaires qui permettent la saisie des informations (combo, checkboxes, etc.).
A partir de la version 1.11, les widgets ne sont plus du tout construits comme sur les versions précédentes.
Ce qu’il faut retenir : avant, c’était le développeur qui pouvait surcharger les widgets, j’ai fait un petit article ici.
Ce qu’il faut retenir sur la nouvelle gestion des widgets : le graphiste peut avoir accès à l’habillage, et configurer sur mesure l’affichage des widgets. C’est un changement très important du point de vue de travail en équipe, surtout si vous avez un graphiste / front end dans votre équipe.
La documentation est très fournie, jetez un coup d’oeil par là.
Mais son inconvénient, c’est qu’elle est, justement, très fournie… voici donc un résumé.
« surcharger » les widgets
- Dans
settings.py
, rajouter dans les applications installées (INSTALLED_APPS
) l’application'django.forms'
- Toujours dans
settings.py
, dans la directiveTEMPLATES
, ajoutez la directive'DIRS'
s’il elle n’y est pas déjà, et précisez dans un tableau les répertoires supplémentaires, par exemple pour moi j’ai :
'DIRS': [os.path.join(BASE_DIR, 'templates')],
- Surchargez le composant qui vous intéresse en déclarant le template, exemple :
class MonCheckboxSelectMultiple(CheckboxSelectMultiple):
template_name = 'include/widget/checkbox_select.html' - Organisez vous dans votre dossier
templates
à l’identique de la déclaration. Pour remprendre mon exemple j’ai un fichiertemplates/include/widget/checkbox_select.html
dans lequel j’ai copié collé le code source du template Django, puis je l’ai modifié pour qu’il convienne à mes besoins.
Allez chercher les templates, et profitez-en pour lire le code source des formulaires, vous verrez il est simple, et vous verrez comment les templates sont déclarés : Python36/Lib/site-packages/django/forms
.