Saya sedang membangunkan aplikasi Flask yang menapis nilai jadual pangkalan data Mysql dan berdasarkan nilai pilihan dropdown pertama, ia akan mengemas kini nilai dropdown kedua. Akhirnya pulangkan beberapa data
Sekarang kod berfungsi tetapi nampaknya terdapat pepijat dalam kod sehingga apabila saya membuat pilihan baharu daripada lungsur pertama ia mengisi lungsur kedua dengan nilai lungsur pertama serta nilai yang dijangkakan untuk lungsur kedua senaraikan nilai
Ia tidak sepatutnya melakukan ini, saya mahu ia hanya mengisi dropdown kedua dengan nilai yang dijangkakan, bukan menambah nilai dropdown pertama bersama-sama dengannya.
Ini adalah kod aplikasi kelalang saya:
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()
Ini kod html saya dengan sedikit JavaScript
{% if result %}Drop Down Filter
Terima kasih, sebarang bantuan akan sangat dihargai
Isu ini berlaku apabila anda menghantar respons templat selepas penapisan.
Anda telah membuat index.html, tetapi apabila menukar pilihan pemilihan daripada baris itu, anda juga sedang memaparkan index.html.
Ini pada asasnya bermakna anda menampal semua kod html anda ke dalam elemen pilihan yang boleh anda periksa dengan memeriksanya dalam penyemak imbas anda.
Pada pendapat saya, apa yang perlu dilakukan ialah anda hanya perlu menghantar kamus Python sebagai respons topik kanak-kanak.
Selepas berjaya mendapatkan kamus, respons akan diformatkan supaya ia perlu dihuraikan ke dalam json. Anda kemudiannya boleh menggunakan gelung JS untuk mencipta gelung dan menambahkannya pada pemilihan sub_topik anda.