Übergeben von Wert aus einem Dropdown-Menü zu einer Flaschenvorlage

Ich habe ein Problem, das ein Element aus einem HTML-Dropdown-Menü zu einer SQL-Abfrage ausgibt.

Ich bin nicht ganz sicher, welches Konzept aus meinem Code fehlt, um diese Arbeit zu machen. Die meisten Beispiele, die ich gefunden habe, sind in PHP und ich bin nicht sicher, wie man es in Python übersetzen kann.

Hier ist das Szenario. Ich bin mit Flask und Sqlite und ich versuche, lassen Sie den Benutzer wählen Sie ein Element aus einem HTML-Dropdown-Menü. Der aus dem Dropdown-Menü ausgewählte Element wird in einer SQL-Abfrage verwendet, um Informationen aus einer Datenbank abzurufen und diese Ergebnisse dann auf einer neuen Seite anzuzeigen.

Ein Beispiel wählt der Benutzer "Red" aus einem Dropdown, der 3 Optionen (Rot, Blau, Grün) hat und auf eine Schaltfläche "Senden" klickt. "Red" wird an eine SQL-Abfrage in meiner app.py-Datei übergeben, die alle Daten aus Zeilen abruft, in denen color = "Red" ist. Diese abgerufenen Daten werden dann auf /results.html angezeigt.

Ich glaube, mein Problem ist, dass ich nicht korrekt einen Wert auf die Elemente in meinem Dropdown-Menü und dann übergeben diesen Wert an meinen Python-Code, der die SQL-Abfrage ausgeführt wird. Das ist meine Annahme, wie das funktionieren sollte, aber ich könnte hier etwas größeres fehlen.

Ich habe viele Bits von HTML ausprobiert, um diese Arbeit zu machen, aber ich bin nicht einmal sicher, dass dort, wo mein Problem auftritt. Wenn ich "Submit" trage, nehme ich die neue Seite, aber nichts aus der Datenbank wird angezeigt

Hier ist mein Code, für meine 2 Ansichten ('/' & 'results.html') und meinen Python Code:

@app.route('/results.html', methods=['GET','POST']) def results(): g.db = connect_db() cur = g.db.execute("SELECT * FROM all_items WHERE name = '{}'".format('Red')) posts = [dict(item=row[0], name=row[1]) for row in cur.fetchall()] g.db.close() return render_template('results.html', posts=posts) 

Hier ist die Ansicht, wo die Dropdown-Menüs vorhanden sind

 <select name="Item_1"> <option value="Red">Red</option> <option value="Green">Green</option> </select> <form name="Item_1" action="results.html" method='POST'> <button type="submit">Compare!</button> </form> 

Hier ist die Ansicht, wo die Ergebnisse aus der Auswahl von "Rot" angezeigt werden sollen

 % extends "template.html" %} {% block content %} <h2>Results</h2> {% for p in posts %} <strong>Item:</strong> {{ p.item }} <strong>Name:</strong> {{ p.name}} {% endfor %} {% endblock %} 

2 Solutions collect form web for “Übergeben von Wert aus einem Dropdown-Menü zu einer Flaschenvorlage”

Sie müssen Ihre select in das form .

 <form name="Item_1" action="results.html" method='POST'> <select name="Item_1"> <option value="Red">Red</option> <option value="Green">Green</option> </select> <button type="submit">Compare!</button> </form> 

Ein noch besserer Weg, um das form zu erklären wäre

 <form name="Item_1" action="{{ url_for('results') }}" method="POST"> 

Wie erwähnt von @dim setzen Sie die Auswahl innerhalb eines Formulars und der gewählte Wert kann mit request.form['Item_1'] . Allerdings ist das Element abgefragt ist eine Auswahl, so würde ich lieber verwenden statt POST. Aus Wiki, http://de.wikipedia.org/wiki/POST_(HTTP) wird POST verwendet, wenn

 Die POST-Anforderungsmethode ist so ausgelegt, dass ein Webserver die im Anforderungsnachricht enthaltenen Daten zur Speicherung akzeptiert. [1]  Es wird oft beim Hochladen einer Datei oder beim Einreichen eines ausgefüllten Webformulars verwendet.

Also würde ich lieber GET bevorzugen, mit dem man die Datenbank abfragen kann. Bei Verwendung von GET kann Item_1 als Anforderungsparameter übergeben werden und hat mit flask.request.args verwendet

  • Sqlalchemy postgresql wo int = string
  • SQLite-Parameter-Substitutionsproblem
  • Erstellen Sie eine Miniaturansicht aus dem Bild und legen Sie sie in SQLite als Blob ein
  • SQLAlchemy: Umgang mit CP-1252 Daten, wenn Python erwartet, dass es UTF-8 ist
  • Verwendung von unicode () und encode () Funktionen in Python
  • Django: plötzliche DB zurücksetzen nach Heroku schlafen
  • Wie man den Primärschlüssel beim Schreiben eines Pandas-Dataframs auf eine sqlite-Datenbanktabelle mit df.to_sql setzt
  • Python + Flask App läuft aus falschem Ordner nach dem Ausführen von Pycharm auf 127.0.0.1
  • Wie fliegst du Strings für SQLite Tabellen- / Spaltennamen in Python?
  • Fehlende Tabelle beim Ausführen von Django Unittest mit Sqlite3
  • Sqlite3.DatabaseError: Datei ist verschlüsselt oder keine Datenbank
  • Python ist die beste Programmiersprache der Welt.