Bonjour à tous,
Voila, je fais une application maison de trésorerie en python et via le framework Django.
Celle-ci fonctionne bien mais je voudrais aller plus loin dans le dynamisme de mes pages et éviter soit la page de recharger, soit de les multiplier.
En gros, je veux faire une page permettant de rédiger un devis. Et sur cette page, j'aurais 2 boutons: un pour les prestations, un pour le matériel. Et je veux que le montant du devis soit calculé automatiquement. Bref, une vraie page interactive.
Si en mode statique avec différentes pages, c'est jouable, on dynamique, bah la...
J'ai essayé de suivre plusieurs tutos en me basant sur Ajax, et il semblerait que beaucoup parle de fetch. Du coup, j'essaie d'apprendre via cette méthode. J'arrive à afficher le formulaire que je veux sans problème, mais ensuite, je ne peux m'en servir. J'ai fait un simple "alert('toto')" pour tester mais cela ne fonctionne pas. Le code ajouté de manière dynamique. DE mémoire, j'avais rencontré à une époque ou je jouais avec le php et cela provenait d'un callback manquant car ma fonction n'était pas connu au chargement de la page (si je ne dis pas de bêtise)
Voici le code simplifié, j'ai ma page devis.html qui sera la page principale. Je n'ai mis qu'un seul bouton et formulaire pour simplifier (si ça marche avec un, ça marchera avec 10 j'imagine)
devis.html
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 {% load static %} <p><button id="btnForm">Formulaire</button></p> <p><div id="divLigne"> <table> <tr> <th>Désignation</th> <th>Désignation</th> <th>Désignation</th> <th>Désignation</th> </tr> </table> </div></p> <p><div id="divForm"></div></p> <script src="{% static 'ajax.js' %}"></script>
le formulaire que j'intègre avec mon code JS pour pouvoir traiter mon formulaire une fois renseigné ensuite.
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <label>Désignation</label><input type="text" placeholder="Désignation" name="designation"><br /> <label>Quantité</label><input type="text" placeholder="0.00" name="quantite"><br /> <label>Montant</label><input type="text" placeholder="0.00" name="montant"> <button id="formValid">Valider</button> <script> document.querySelector("#formValid").addEventListener("click", event => { alert('toto'); }) </script>
et le script ajax.js ou j'ai intégré un "callback" sur un exemple mais qui ne fonctionne pas
Code javascript : 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 function loadForm(url) { const box = document.getElementById("divForm"); fetch(url) .then(response => response.text()) .then(html => { box.innerHTML = html; }) .catch(error => { console.log(error); }); } document.querySelector("#btnForm").addEventListener("click", event => { event.preventDefault(); loadForm("formulaire"); })
Je mets au cas ou l'extrait de mon urls.py
et de mon views.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part path('formulaire', views.formulaire, name="formulaire")
En vous remerciant pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 def formulaire(request): return render(request, "formulaire.html")
Partager