Pouvoir conserver les données d'un visiteur après la soumission d'un formulaire est intéressant, en particulier si le formulaire est invalide et que le visiteur doit de nouveau remplir celui-ci. Considérons l'exemple suivant, on dispose d'un formulaire avec deux champs obligatoires (title et content) défini dans le fichier models.py
class MyForm(forms.Form):title = forms.CharField(max_length=500)content = forms.CharField(required=False)
Les données du formulaire sont alors contenues dans "MyForm(request.POST)" et il suffit de passer ces informations vers le template mytemplate.html' via 'return render(request, 'mytemplate.html', {'form': form}):'
def MyView(request):if request.method == 'POST':form = MyForm(request.POST)if form.is_valid():# to something ...return HttpResponseRedirect('/Welcome/')else:form = NameForm()return render(request, 'mytemplate.html', {'form': form})
dans le template 'mytemplate.html' on peut alors directement accéder aux données du formulaire précédemment soumis avec la syntax suivante form.title.value, illustration:
<input type="text" placeholder="" name="title" value="{{form.title.value}}"><input type="text" placeholder="" name="content" value="{{form.content.value}}">
Note 1: exemple avec un formulaire comprenant une liste déroulante
<select name="day_name"><option value=0 {% if form.day_name.value == '0' %}selected{% endif%}>Lundi</option><option value=1 {% if form.day_name.value == '1' %}selected{% endif%}>Mardi</option><option value=2 {% if form.day_name.value == '2' %}selected{% endif%}>Mercredi</option></select>
Note 2: Pour définir les valeurs par défaut il faut ajouter dans le fichier models.py l'option 'initial':
class MyForm(forms.Form):title = forms.CharField(max_length=500, initial='Super Title !')content = forms.CharField(rmax_length=500)
Note 3: Si le titre est vide par exemple pour éviter d'avoir None dans le template il suffit d'utiliser la syntax suivante
<input type="text" placeholder="" name="title" value="{{form.title.value|default_if_none:''}}">
Recherches associées
| Liens | Site |
|---|---|
| Django - Keep the form values filled after form validation | stackoverflow |
| djangoproject | django doc |
| Hide None value of django form field | stackoverflow |
| Django set default form values | stackoverflow |
| Display a default value in form fields Django | stackoverflow |
| Django multiple forms and keep field data input after submission | stackoverflow |
