Einführung
Das Generieren von HTML aus Python heraus ist nicht Spaß und tatsächlich ziemlich umständlich, da Sie selbst die HTML-Umwandlung mit escape vornehmen müssen, um die Anwendung sicher zu halten. Aus diesem Grund konfiguriert Flask das Jinja2-Template-Engine automatisch für Sie. Mit Templates können beliebige Textdateien generiert werden. Bei Webanwendungen werden Sie hauptsächlich HTML-Seiten generieren, können aber auch Markdown, einfachen Text für E-Mails und alles andere erzeugen.
In diesem Lab werden wir lernen, wie das Jinja2-Template-Engine verwendet wird, um sichere und dynamische Templates zu generieren.
Ein Template rendern
In diesem Schritt implementieren Sie die Template-Rendering mit dem Jinja2-Template-Engine.
- Öffnen Sie die Datei
rendering_templates.pyund importieren Sie zunächst dieFlask-Klasse undrender_template. Erstellen Sie dann eine Instanz derFlask-Klasse.
from flask import Flask, render_template
app = Flask(__name__)
- Als Nächstes verwenden wir den
route()-Decorator, um zwei Routen,/und/<name>, zu erstellen, um eine einzige View-Funktion namenshellozu teilen. Um ein Template zu rendern, können Sie dierender_template()-Methode verwenden. Sie wird von Flask bereitgestellt, um Templates mit dem Jinja2-Template-Engine zu rendern. Alles, was Sie tun müssen, ist, den Namen des Templates und die Variablen anzugeben, die Sie als Schlüsselwortargumente an das Template-Engine übergeben möchten. In der View-Funktion verwenden wir dierender_template()-Methode, um das Templatehello.htmlmit einer Variable namensnamezu rendern.
@app.route('/')
@app.route('/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
- Erstellen Sie einen
main-Eintrittspunkt des Skripts, um die Flask-Anwendung auf einem Port (z.B. port=5000) zu starten. Aktivieren Sie dann dendebug-Modus.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- Flask sucht standardmäßig nach Templates im templates-Ordner. Wir müssen daher einen Ordner namens
templateserstellen und die Dateihello.htmlunter diesem Ordner erstellen. Wir können den erforderlichen Ordner und die Datei erstellen, indem wir den folgenden Befehl im Terminal ausführen.
cd ~/project
mkdir templates
cd templates
touch hello.html
- Öffnen Sie die Datei
templates/hello.htmlund schreiben Sie den folgenden Code:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
Der obige Code verwendet den bedingten Block in Jinja2. Es wird überprüft, ob die Variable name wahrheitsfähig ist (nicht None oder leer). Wenn ja, wird der Inhalt Hello {{ name }}! angezeigt. Andernfalls wird der Inhalt Hello, World! angezeigt.
- Um die Anwendung auszuführen, verwenden Sie zunächst die folgenden Befehle, um die Flask-Anwendung im Terminal zu starten:
cd ~/project
python3 rendering_templates.py
- Öffnen Sie dann die Registerkarte "Web 5000" oben in der Schnittstelle und aktualisieren Sie die Schnittstelle. Dann sollten Sie sehen, dass die Seite Hello, World! anzeigt.


- Für die Route
/<name>können Sie direkt einen Suffix in der Adressleiste oben hinzufügen. Beispielsweise ist unten ein Suffixflaskin der Adressleiste mit Port 5000 eingegeben, und es zeigt Hello, flask! als Ausgabe an.
Sie können verschiedene /<name>-Pfade in die Adressleiste eingeben, die Ausgabe wird entsprechend geändert.
Zusammenfassung
In diesem Lab haben wir gelernt, wie wir unsere Templates mit dem Jinja2-Template-Engine mithilfe der render_template()-Methode rendern. Diese Methode rendert nicht nur Templates lebendig, sondern ermöglicht auch die automatische Entitätssetzung, was dazu beiträgt, potenzielle XSS-Angriffe zu verhindern.
