Python TagebuchPython lernen – mein persönliches Tagebuch

Tagebuch-Eintrag #61
Flask – render_template mehrere Variablen

Wie kann ich mehrere Variablen in einem „return“ an das Template übergeben. Das ist eine sehr wichtige Frage.
Werbung/Anzeige

Nach dem ich Bekanntschaft mit dem Template-Engine Jinja hatte und auch Daten von meiner hello.py-Datei an das Template übertragen konnte, stellte sich mir die Frage, ob es möglich ist, mit return render_template() mehr als nur einen Wert zu definieren, die das Template ausgeben soll. Bisher habe ich ja nur meinen Namen ausgegeben.

Nuja, für mich stellte sich eigentlich nicht die Frage ob es kann, sondern wie. Weil ich es mir schlicht und einfach nicht vorstellen kann, dass Flask es nicht kann.

Und darum geht es jetzt in diesem Tagebuch-Eintrag. Mehrere Variablen über render_template verfügbar machen.

So nicht!

Weil ich ein Anfänger bin, probierte ich einfach ein zweites return unter dem ersten zu packen und darüber eine zweite Variable zu übergeben.

@app.route('/about')
def its_me():
    # Wert name wird im main.html-Template übergeben und ausgegeben
    return render_template('main.html', name='Jing')
    return render_template('main.html', name2='Jing2')

Doofe Idee. Klappt natürlich nicht.

Dann hatte ich die Idee, einfach eine zweite Funktion unter @app.route() zu schreiben.

@app.route('/about')
def its_me():
    # Wert name wird im main.html-Template übergeben und ausgegeben
    return render_template('main.html', name='Jing')
def its_me2():
    # Wert name wird im main.html-Template übergeben und ausgegeben
    return render_template('main.html', name2='Jing2')

Genau so blöde Idee. Klappte auch nicht.

So geht das!

Ich dachte mir dann, dass muss doch einfacher funktionieren. Also schaute ich mir die Dokumentation zu render_template() näher an. Es beschreibt zum zweiten Wert, dem **context folgendes:

context – the variables that should be available in the context of the template.

Die Lösung steckt im Detail. Es steht variables – die Mehrzahl. Das heißt, es kann in einem return-Befehl mehrere Variablen zugewiesen werden, die im Template dann ausgegeben werden.

# Wenn die Unterseite "about" aufgerufen wird, wird diese Ausgabe getätigt/Funktion ausgeführt: "About me"
@app.route('/about')
def its_me():
    # Wert name und status werden im main.html-Template übergeben und ausgegeben
    return render_template('main.html', name='Jing', status='Flask lernen')

Oben der angepasste Code in der letzten Zeile. Unten die HTML-Datei mit Ausgabe „Flask lernen“, welches als status definiert wurde.

{% if name %}
    <h1>ABOUT</h1>
    <strong>Hallo {{ name }}!</strong>
    <p>Was machst du gerade?
        <br/><strong><em>{{ status }}</em></strong>
    </p>
{% else %}
    <h1>Startseite</h1>
    <strong>Hallo Welt!</strong>
{% endif %}

Und das ist das Ergebnis im Browser. Es funktioniert also wie es soll.

render_template() mit mehrere Variablen
render_template() mit mehrere Variablen

So, und was kommt als nächstes? Gemäß dem Quick Start Guide von Flask, würde nun POST oder GET request kommen. Aber ich bin irgendwie noch nicht ganz fertig mit dem render_template. Denn bisher habe ich die Variablen bei render_template manuell einen Wert zugwiesen: name=’Jing‘ und status=’Flask lernen‘. Aber wie verhält es sich, dann ich stattdessen eine Variable zuweise? Das macht das ganze viel dynamischer.

Mal schauen wofür ich mich entscheide.

Bleibt dran und ein schönes Wochenende! 🙂

# # ## ENDE Tagebuch-Eintrag #61 | Flask – render_template mehrere Variablen
Werbung/Anzeige
Schlagwörter im Tagebuch-Eintrag:

Kommentar schreiben




Werbung/Anzeige