2016-04-16 19 views
0

Ich lerne Flasche. Ich wollte damit beginnen, eine einfache Formularauswahlseite zu erstellen. Meine Absicht ist, dass der Benutzer die Option auswählt und sie dann auf einer anderen Seite unter Verwendung von GET anzeigt. Ich versuche den folgenden Code.Mit 'GET', um ausgewählte Optionen in Flask anzuzeigen

from flask import Flask, render_template, request, redirect 
app = Flask(__name__) 

@app.route('/') 
def search(): 

    return render_template('select_doc.html') 

@app.route('/view_doc/<k>') 
def view_doc(k): 
    return render_template('view_doc.html',k=k) 

if __name__ == '__main__': 
    app.run(debug=True) 

Das ist mein select_doc.html

{% block content %} 

<body> 
    <h1>Pick your plag</h1> 
     <form action='/view_doc'> 


       <select name="k"> 
        <option value="2">2</option> 
        <option value="3">3</option> 
        <option value="4">4</option> 
        <option value="5">5</option> 
       </select> 
<input type='submit' value='Select'> 
</form> 
</body> 
{% endblock content %} 
</html> 

Das ist mein view_doc.html

<html> 
    {% block content %} 
    <body> 
     <br>{{ k }}<br> 
    </body> 
     {% endblock content %} 
     </html> 

jedoch ist, dass ich einen Fehler sagen 404 not found. Das ist mein run.py. Was mache ich falsch?

+0

Das Attribut 'Aktion' sollte mit der im Dekorator der Funktion 'view_doc' angegebenen Route übereinstimmen, also' /results'...etc. Versuchen Sie das, dann prüfen wir, was sonst noch falsch ist. – fips

+0

Sorry, änderte es jetzt. Aber bekomme immer noch die 404 nicht gefunden –

+0

Ihre Route erfordert '' Parameter, aber es wird nicht durch das Formular gesendet. Wenn Sie submit mit 'method =" get "' drücken, was der Standard für das Formular ist, lautet die Anfrage-URL '/ results? K = value'. Entweder du entfernst entweder "" von deiner Route und entpackst sie aus der Querystring oder du schreibst js, um den Wert auf die URL wie folgt zu setzen: '/ results/value'. Die einfachste Option ist die erste, also können Sie 'request.args.get ('k')' machen, um 'k' zu extrahieren und in' render_template' zu ​​verwenden. – fips

Antwort

0

Ihre Route erfordert Parameter, aber es wird nicht vom Formular gesendet. Wenn Sie mit dem Formular method="get" (Standard, wenn nicht angegeben) auf Senden klicken, lautet die Anfrage-URL /results?k=value.

Also entweder Sie <k> von Ihrer Route entfernen und aus dem Abfragezeichenfolgeflag extrahieren, oder Sie einige js schreiben auf der URL wie diese /results/value den Wert zu setzen. Die einfachste Option ist die erste, also können Sie einfach request.args.get('k') ausführen, um k zu extrahieren und in render_template zu verwenden.

0

Sie müssen eckigen Klammern in view_doc

@app.route('/view_doc/<k>') 
def view_doc(k): 
    return render_template('view_doc.html',k=k) 

Sie sollten auch Ihren Code ein wenig aufzuräumen, damit es besser lesbar ist.

+0

immer noch Fehler –

+0

siehe Kommentar von fips oben, ich habe das Code-Fragment bearbeitet, um zu entsprechen. – Cyb3rFly3r

+0

Ich habe Angst, dass ich trotz aller Änderungen den gleichen Fehler bekomme –

Verwandte Themen