Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Générer des liens HTML avec Python (Flask)


Sujet :

Réseau/Web Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Générer des liens HTML avec Python (Flask)
    Bonjour,

    je dois, pour un projet de L1 informatique, créer une sorte de "site web" très simple de référencement de données (régions, départements, tranches d'âge, niveaux de diplôme...). J'utilise Flask, les pages web sont en html, les fonctions sont dans un fichiers webapp.py et codées en Python et les données utilisées dans les requêtes sql viennent d'une base de donnée.
    Seulement je suis complètement largué et il est demandé à un moment d'incorporer dans ma page d'accueil html un lien qui donne sur une autre page html dans laquelle sera affichée la liste des régions de la base de donnée. Ensuite il faut transformer chacun des noms de régions de la liste générée en un lien qui donne cette fois sur la liste des départements correspondant à la région cliquée, classés par ordre alphabétique.

    Voici ce que dit l'énoncé à ce sujet :

    Dans le fichier html de votre page d'accueil, mettez un premier lien qui permettra de donner la liste des régions comme demandé. Il faudra donc ajouter une route et une fonction dans votre fichier webapp.py qui correspondra à ce lien. Implémentez cette fonction dans votre fichier webapp.py. Il s'agit de simplement faire afficher dans une jolie table HTML le résultat d'une requête SQL simple (select nom from régions).

    Maintenant, au lieu de simplement afficher le nom des régions, transformez ce nom en un lien vers une page qui affiche la liste de ses départements. Vous pouvez, par exemple, faire pointer le lien vers une route /regions/<numregion> où numregion est le numéro de la région que vient de cliquer l'utilisateur. A vous d'écrire le code JINJA pour générer les liens. Créez ensuite la route /regions/<numregion> qui permet d'interroger la relation DEPARTEMENTS.

    Je ne sais vraiment pas comment faire cela, pourriez vous m'aider ?

    Merci par avance,

    Cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 468
    Points : 24 475
    Points
    24 475
    Par défaut
    Salut,

    Citation Envoyé par Piteure Voir le message
    A vous d'écrire le code JINJA pour générer les liens. Créez ensuite la route /regions/<numregion> qui permet d'interroger la relation DEPARTEMENTS.
    Comment générer une table avec Flask/Jinja2 s'apprend dans le tuto et il y a plein d'exemples sur Internet.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci pour votre aide, cependant je suis vraiment un cas desespéré et j'ai du mal à comprendre les exemples sur le site de flask.
    Dans mon cas je voudrais simplement créer un lien dans ma page d'accueil qui renvoie à une page html dans laquelle apparait la liste des régions obtenue grâce à une requête de mon fichier python (webapp.py). Puis ensuite il faudrait que je transforme chaque nom de région en un lien vers la liste des départements dans encore une autre page html. C'est surtout ce dernier point qui me bloque

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 468
    Points : 24 475
    Points
    24 475
    Par défaut
    Salut,

    Citation Envoyé par Piteure Voir le message
    merci pour votre aide, cependant je suis vraiment un cas désespéré et j'ai du mal à comprendre les exemples sur le site de flask.
    Si vous ne comprenez pas la documentation ni les différents exemples que vous pouvez trouver sur Internet, je ne vois pas comment ajouter un exemple de plus vous aiderait en quoi que ce soit.

    J'espère que quelqu'un aura la patience de vous venir en aide mais si vous n'êtes pas plus précis dans les soucis rencontrés et que vous ne montrez pas que vous avez quand même compris un peu quelque chose... le corrigé que le professeur vous donnera risque d'arriver plus vite.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre émérite Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    1 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2013
    Messages : 1 168
    Points : 2 471
    Points
    2 471
    Par défaut
    bonjour,
    Citation Envoyé par Piteure Voir le message
    Puis ensuite il faudrait que je transforme chaque nom de région en un lien vers la liste des départements dans encore une autre page html. C'est surtout ce dernier point qui me bloque
    Il serait beaucoup plus simple de nous dire à quel endroit exact tu es bloqué - lorsque je te lis j'ai l'impression qu'en fait tu ne sais pas faire un lien en html ? (donc aucun rapport avec python) puisque après on te demande de faire le même travail que tu as déjà bien fait au début de l'exercice (route + fonction requete sql et affichage dans un tableau html )
    $moi= ( !== ) ? : ;
    www.webstratege.fr

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre aide, excusez moi pour le peu d'informations, je vais essayer de mieux expliquer en espérant que vous comprendrez ma situation.

    En fait, dans mon fichier python (webapp.py), j'ai la fonction suivante qui envoie une requête à la base de donnée pour obtenir la liste des régions (c_liste) et la stocker dans la variable character_list située dans mon fichier html nommé regions.

    Voici la fonction python dans mon webapp.py :

    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
    @app.route("/regions")
    def regions():
        print('Trying to connect to the database')
        conn = psycopg2.connect(host='dbserver', dbname='nom_de_la_base_de_donnee', user='mon_nom')
        print('Connected to the database')
        cur = conn.cursor()
        command = 'select * from REGIONS;'
        cur.execute(command)
        data = cur.fetchall()
        c_liste = []
        for i in range (len(data)):
            c_liste = c_liste + [data[i][1]]
        print(c_liste)
        cur.close()
        conn.close()
        return render_template('regions.html', character_list=c_liste)
    Et dans mon fichier regions.html il n'y a pour l'instant que ceci :


    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
     <head>
      <title>Regions</title>
      <h1 align="center"> {{ character_list }} </h1>
     </head>
     <body>
     </body>
    </html>


    Voici le lien dans mon fichier index.html (page d'accueil) qui donne sur la route /regions :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <ul>
        <li><a href="/regions.html" target="_blank"><ins >Choisir une région</ins></a></li>
      </ul>


    Ainsi le schéma est le suivant :

    Je suis sur ma page d'accueil, je clique sur le lien qui me mène vers /regions et j'ai la liste des régions de la base de données.
    Maintenant je voudrais qu'au lieu d'avoir une simple liste, chaque nom de région deviennent un lien sur lequel je peux cliquer pour avoir la liste des départements de la région (via une autre fonction python).
    Mais je ne sais pas comment faire ceci. Pouvez-vous m'aider pour cela ?


    J'espère que vous comprendrez, merci d'avoir lu ^^

  7. #7
    Membre émérite Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    1 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2013
    Messages : 1 168
    Points : 2 471
    Points
    2 471
    Par défaut
    donc ta question est bien comment créer un lien en html ?

    Le lien est donné dans ton énoncée
    pointer le lien vers une route /regions/<numregion>
    Dans ton index tu as un modèle pour faire des liens html, il te suffit d'utiliser ce "modèle" (a href="...") dans le template regions.html
    A toi de changer légèrement ta requete sql dans webapp.py pour passer en plus à ton template "regions.html" l'id de la région

    ----

    ton modèle regions.html n'est pas bon, on te demandait d'afficher les régions dans un beau tableau, pour cela il faut parcourir (for) les données que tu lui passes et surtout pas essayer d'afficher le tout à l'arrache
    $moi= ( !== ) ? : ;
    www.webstratege.fr

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    D'accord donc si je comprends bien, je dois ajouter dans mon return un paramètre pour l'id des régions comme ceci ?

    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
    @app.route("/regions")
    def regions():
        print('Trying to connect to the database')
        conn = psycopg2.connect(host='dbserver', dbname='bpinaud', user='pbaysset')
        print('Connected to the database')
        cur = conn.cursor()
        command = 'select * from REGIONS;'
        cur.execute(command)
        data = cur.fetchall()
        c_liste = []
        for i in range (len(data)):
            c_liste = c_liste + [data[i][1]]
        print(c_liste)
        cur.close()
        conn.close()
        return render_template('region.html', character_list=c_liste, numregion=[i], liste=len(data))

    Pour ce qui est de regions.html, je ne sais vraiment pas comment faire une boucle for pour afficher les résultats de ma requête

    Cela doit ressembler a quelque chose du style non ?

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for {{ numregion }} in {{ liste }}%
        <li>{{ character_list }}</li>
    {% endfor %}


    Je suis vraiment perdu avec toutes les variables.


    La base de donnée suis le schéma suivant :


    Nom : modele.png
Affichages : 112
Taille : 32,1 Ko

  9. #9
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 468
    Points : 24 475
    Points
    24 475
    Par défaut
    Salut,

    Citation Envoyé par Piteure Voir le message
    Je suis vraiment perdu avec toutes les variables.
    Autant éviter d'en créer si elles ne servent à rien...
    Et il vous appartient de réfléchir un peu: si le schéma de la table REGIONS est NUM, NAME, alors "select * from REGIONS;" retourne une liste de tuple dans lequel vous avez tout ce qu'il faut quitte à le préciser via "select ID, NOM from REGIONS;"
    Ce qui pourrait s'écrire (non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @app.route("/regions")
    def do_get_regions():
        dsn = dict(host='dbserver', dbname='bpinaud', user='pbaysset')
        with psycopg2.connect(**dsn) as cnx:
            with cnx.cursor() as cs:
                cs.execute('select ID, NUM from REGIONS;')
                regions = cs.fetchall()
        return render_template('region.html', regions=regions)
    Puis dans le HTML, écrire une boucle for (Jinja2), c'est juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        {% for id, nom in regions %}
         ... le code qui en fait quelque chose...   
        {% endfor %}
    Citation Envoyé par Piteure Voir le message
    Pour ce qui est de regions.html, je ne sais vraiment pas comment faire une boucle for pour afficher les résultats de ma requête
    Le code que vous avez posté et les questions que vous poser montrent juste que vous n'avez pas acquis un niveau de programmation (en général et avec Python) suffisant pour arriver à vous dépatouiller avec une bibliothèque telle que flask.
    Si vous débutez normal que la lecture de la documentation et les exemples que vous allez trouver sur Internet ne vous aident pas: il faut avoir pris le temps de débuter pour comprendre un peu ce que çà raconte.

    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Récuperer des liens HTML avec une expression régulière
    Par magicvinni dans le forum Général Python
    Réponses: 2
    Dernier message: 16/02/2019, 18h18
  2. Réponses: 1
    Dernier message: 04/03/2016, 16h45
  3. Réponses: 3
    Dernier message: 05/09/2015, 20h01
  4. Peut on générer des pages HTML en pdf avec jQuery
    Par pierrot10 dans le forum jQuery
    Réponses: 11
    Dernier message: 25/03/2011, 17h30
  5. Comment générer des pages HTML dynamiques ?
    Par Devil666 dans le forum Java EE
    Réponses: 2
    Dernier message: 15/04/2005, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo