Je développe une application Flask qui filtre les valeurs d'une table de base de données Mysql et, en fonction de la valeur sélectionnée de la première liste déroulante, elle mettra à jour la valeur de la deuxième liste déroulante. Renvoyez enfin quelques données
Maintenant, le code fonctionne mais il semble y avoir un bug dans le code tel que lorsque je fais une nouvelle sélection dans la première liste déroulante, il remplit la deuxième liste déroulante avec la valeur de la première liste déroulante ainsi que la valeur attendue pour la deuxième liste déroulante. lister les valeurs
Cela ne devrait pas faire cela, je veux qu'il remplisse uniquement la deuxième liste déroulante avec la valeur attendue, sans ajouter la valeur de la première liste déroulante.
Voici le code d'application de mon flacon :
from flask import jsonify, request from flask import Flask, render_template import mysql.connector app = Flask(__name__) # Configure MySQL connection cnx = mysql.connector.connect( host="xxxxxxx", user="xxxxxxxxx", password="xxxxxxxxx", database="xxxxxxxxxx") @app.route('/', methods=['GET', 'POST']) def index(): try: cursor = cnx.cursor() query = "SELECT topic FROM text_table" cursor.execute(query) data = [row[0] for row in cursor.fetchall()] # Get the first column of all rows cursor.nextset() # consume any unread result cursor.close() if request.method == 'POST': selected_topic = request.form.get('selected_topic') # Get the selected topic from the form if selected_topic: cursor = cnx.cursor() query = "SELECT sub_topic FROM text_table WHERE topic = %s" cursor.execute(query, (selected_topic,)) sub_topics = [row[0] for row in cursor.fetchall()] # Get the sub topics for the selected topic cursor.nextset() selected_sub_topic = request.form.get('selected_sub_topic') # Get the selected sub topic from the form if selected_sub_topic: query = "SELECT text FROM text_table WHERE topic = %s AND sub_topic = %s" cursor.execute(query, (selected_topic, selected_sub_topic)) result = cursor.fetchone()[0] # Get the value of the text for the selected sub topic cursor.nextset() cursor.close() return render_template('index.html', topics=data, selected_topic=selected_topic, sub_topics=sub_topics, selected_sub_topic=selected_sub_topic, result=result) cursor.close() return render_template('index.html', topics=data, selected_topic=selected_topic, sub_topics=sub_topics) return render_template('index.html', topics=data) except Exception as e: # Return an error message if there's an exception return jsonify(error=str(e)), 500 if __name__ == '__main__': app.run()
Voici mon code html avec un peu de JavaScript
{% if result %}Drop Down Filter
Merci, toute aide sera grandement appréciée
Ce problème se produit lorsque vous envoyez un modèle de réponse après le filtrage.
Vous avez rendu index.html, mais lorsque vous modifiez l'option de sélection à partir de cette ligne, vous rendez également index.html.
Cela signifie essentiellement que vous collez tout votre code html dans un élément de sélection que vous pouvez inspecter en l'inspectant dans votre navigateur.
À mon avis, ce qu'il faut faire, c'est que vous ne deviez envoyer qu'un dictionnaire Python comme réponse du sujet enfant.
Après avoir réussi à obtenir le dictionnaire, la réponse sera formatée et devra donc être analysée en json. Vous pouvez ensuite utiliser des boucles JS pour créer la boucle et l'ajouter à votre sélection de sous-sujet.