English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Vorlagen von Flask

Flask可以以HTML形式返回绑定到某个URL的函数的输出。例如,在以下脚本中,hello()函数将使用附加的<h1>标记呈现 'Hello World'

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
from flask import Flask
 app = Flask(__name__)
 @app.route('/)
 def index():
     return '<html><body><h1>'Hello World'</h1></body></html>'
 if __name__ == '__main__':
     app.run(debug = True)

但是,从Python代码生成HTML内容非常麻烦,尤其是在需要放置可变数据和Python语言元素(如条件或循环)时。经常需要转义HTML代码。

它可以利用Jinja2模板引擎技术,而不需要从函数返回硬编码HTML。如下代码所示,可以通过render_template()函数渲染HTML文件。

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
from flask import Flask
 app = Flask(__name__)
 @app.route('/)
 def index():
    return render_template('hello.html')
 if __name__ == '__main__':
    app.run(debug = True)

Flask将尝试在该脚本所在的同一文件夹中查找templates文件夹中的HTML文件。使用模板的应用程序目录结构如下所示 -

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
app.py
 hello.py
     templates
         hello.html
         register.html
         ....

术语“Web模板系统”是指设计一个HTML脚本,其中可以动态插入变量数据。Web模板系统由模板引擎,某种数据源和模板处理器组成。

Flask使用jinga2模板引擎。Web模板包含用于变量和表达式的HTML语法散布占位符,这些变量和表达式在模板呈现时被替换为值。

以下代码在模板( templates)文件夹中保存为: hello.html

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask HTTP请求方法处理</title>
 </head>
    <body>
       <h1>Hello {{ name }}<!/h1>
    </body>
 </html>

接下来,将以下代码保存在 app.py文件中,并从Python shell运行 -

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/hello/<user>')
 def hello_name(user):
     return render_template('hello.html', name = user)}
 if __name__ == '__main__':
     app.run(debug = True)

Öffnen Sie beim Starten des Entwickler-Servers den Browser und geben Sie die URL ein - http://localhost:5000/hello/maxsu

Der variable Teil der URL wird in den Platzhalter {{name}} eingefügt.

Jinja2Der Template-Engine werden folgende Trennzeichen verwendet, um aus HTML zu entkommen.

{% ... %} für Mehrzeilenanweisungen {{ ... }} für das Ausgeben von Ausdrücken in das Template {# ... #} für Kommentare, die nicht in der Template-Ausgabe enthalten sind # ... ## für Einzeilige Anweisungen

Im folgenden Beispiel wird gezeigt, wie bedingte Anweisungen im Template verwendet werden. Die URL-Regel der Funktion hello() akzeptiert einen Integer-Parameter. Er wird an das Template hello.html weitergeleitet. Dort wird der empfangene Wert der Zahl (Punkte) verglichen (größer oder kleiner50), daher wurde im HTML bedingte Ausgabe ausgeführt.

Python-Skript wie folgt -

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/hello/<int:score'>
 def hello_name(score):
     return render_template('hello.html', marks = score)
 if __name__ == '__main__':
     app.run(debug = True)

Template-Datei: hello.html Das HTML-Template-Skript lautet wie folgt -

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask-Vorlagenbeispiel</title>
 </head>
    <body>
       {% if marks>50 %}
       <h1> Durch die Prüfung bestanden! </h1>
       {% else %}
       <h1>Die Prüfung ist nicht bestanden! </h1>
       {% endif %}
    </body>
 </html>

Beachten Sie, dass die Bedingungsanweisung if-else und endif sind in den Trennzeichen {%..%。%} enthalten.

Führen Sie das Python-Skript aus und öffnen Sie die URL => http://localhost/hello/60, und dann die URL http://localhost/hello/59geöffnet wird, HTML-Ausgaben bedingt angezeigt.

Die Python-Schleifenstruktur kann auch im Template verwendet werden. Im folgenden Skript wird, wenn die URL => http:// localhost:5000/Wenn result() aufgerufen wird, sendet die Funktion result() das Dictionary-Objekt an die Template-Datei: results.html

result.html Der Template-Teil verwendet einen for-Schleif, um die Schlüssel-Wert-Paare des Dictionary-Objekts result{} als Zellen einer HTML-Tabelle darzustellen.

Führen Sie den folgenden Code im Python-Shell aus.

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/result())
 def result():
     dict = {'phy':59,'che':60, 'maths':90
     return render_template('result.html', result = dict)}}
 if __name__ == '__main__':
     app.run(debug = True)

Speichern Sie den folgenden HTML-Skript als Template-Ordner ( templates) im Template-Datei: result.html

# Dateiname: example.py
# Copyright: 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum: 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask-Vorlagenbeispiel</title>
 </head>
    <body>
       <table border = 1>
          {% for key, value in result.items() %}
             <tr>
                <th> {{ key }} </th>/th>
                <td> {{ value }} </td>/td>
             </tr>
          {% endfor %}
       </table>
    </body>
 </html>

Hier sind die Python-Anweisungen, die dem For-Schleifenumlauf entsprechen, enthalten in {%...%}, und die Schlüssel und Werte der Ausdrucksanweisung und -werte in {{}}.

Nachdem die Entwicklung gestartet und in einem Browser geöffnet wurde, öffnen Sie http://localhost:5000/Ergebnis, um die folgenden Ausgaben zu erhalten.