Outils pour utilisateurs

Outils du site


isn:flask_todo03

Activité : afficher une liste de Todo

L'affichage d'une liste de tâches consiste :

  • au serveur de fournir la liste des tâches avec la page index.html ;
  • à la page index.html d'afficher autant de tâches qu'il y en a dans la liste.

Modification de la vue /

app.py
#! /usr/bin/python
# -*- coding:utf-8 -*-
 
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
 
#taches : dictionnaire (tableau associatif) de tâches
taches=[]
#id : identifiant de la tache
id = 1
 
@app.route('/')
def index():
  return render_template('index.html', taches=taches)
 
@app.route('/ajout', methods=['POST'])
def ajout():
  # utiliser les variables globales taches et id
  global taches, id
  vartache = request.form['tache']
  taches.append({"id":id, "libelle":vartache})
  #incrémenter id pour la prochaine tâche
  id = id + 1
  return redirect(url_for('index'))
 
if __name__ == '__main__':
    app.run(debug=True, port=5005)

Explications

  • la vue /ajout redirige maintenant vers la vue /. Pour cela, il faut importer deux autres modules redirect et url_for ;
  • Le dictionnaire taches contient une liste de trois taches qui est passée au template index.html.

Il existe déjà une route pour afficher la page index.html :

  • Cette route est '/' : je peux alors utiliser la fonction redirect() pour faire une redirection vers cette page ;
  • comme il est déconseillé d'écrire plusieurs fois la même route dans une application, je vais faire une redirection en indiquant le nom de la vue 'index' plutôt que la route ;
  • J'utilise le nom de la vue 'index' avec la la fonction url_for()* pour transformer cette vue en une adresse exploitable (une route) par redirect().
  • le code à ajouter avec les fonctions redirect() et url_for :
  return redirect(url_for('index'))
  • à la place de
  return render_template('index.html')

Utilisation de la liste de tâches dans la page index.html

index.html
<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="UTF-8">
	<title>Application Todo</title>
</head>
<body>
  <h1>Todo liste</h1>
    <div>Ajouter une nouvelle tâche : 
      <form action="/ajout" method="POST">
        <input type="text" name="tache">
        <input type="submit"></div>
      </form>
    </div>
    <div>    
      <ul>
	{% for tache in taches %}
          <li><input type="checkbox">{{tache.libelle}}</li>
	{% endfor %}
      </ul>
    </div>           
</body>
</html>

Explications

  • L'affichage de toutes les tâches de la liste se fait en utilisant {% et %} :
  • une seul ligne avec la balise <li> suffit,
  • l'information de la liste est affichée en utilisant {{tache.libelle}}

Retour à l'activité : Utiliser le framework Flask pour créer un site Web dynamique

isn/flask_todo03.txt · Dernière modification: 2019/03/22 07:42 (modification externe)