Bonjour,

J'ai un formulaire à base de bootstrap. Quand je le valide, je voudrais tester les champs remplis. Si c'est OK, j'écris les données dans un fichier que l'utilisateur télécharge, sinon, j'affiche les erreurs trouvées (dans une page html spécifique, ou idéalement dans une boite de dialogue modale).

dans ma vue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def mainform(request):
    if request.method == 'POST':
        items = dict(request.POST.items())
 
        # contrôle des données
        valide = True
        msg = ""
        if items["champ1"] == "":
            msg += "champ1 non valide"
            valide = False
        if items["champ2"] == "0":
            msg += "champ2 non valide"
            valide = False
 
        if valide:
            string2write = formate(champ1, champ2)
 
            response = HttpResponse(string2write,
                content_type="text/plain",
                headers={"Content-Disposition": 'attachment; filename="errors.txt"'},
            )
 
            return response
 
        else:
            render(request, 'errors.html', {"errors": msg})
 
    else:
        return render(request, 'mainform.html')
et j'ai un template errors.html:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
{% extends "base.html" %}
{% load static %}
 
{% block css %}
<link rel="stylesheet" href="{% static 'css/custom.css' %}" type="text/css">
{% endblock css %}
 
{% block content %}
<div>
{{errors}}
</div>
{% endblock content %}
Si je valide et que mon formulaire a des erreurs, au lieu d'afficher la page erreurs.html, j'ai l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
The view monappli.views.mainform didn't return an HttpResponse object. It returned None instead.
Qu'est ce cloche?

et dans un deuxième temps, comment afficher les erreurs dans une boite modale au lieu de les afficher sur une page html.

Merci,
Nico