English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Flask可以以HTML形式返回绑定到某个URL的函数的输出。例如,在以下脚本中,hello()函数将使用附加的<h1>标记呈现 'Hello World' 。
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 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文件。
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 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文件。使用模板的应用程序目录结构如下所示 -
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 app.py hello.py templates hello.html register.html ....
术语“Web模板系统”是指设计一个HTML脚本,其中可以动态插入变量数据。Web模板系统由模板引擎,某种数据源和模板处理器组成。
Flask使用jinga2模板引擎。Web模板包含用于变量和表达式(这些情况下为Python表达式)的HTML语法散布占位符,这些变量和表达式在模板呈现时被替换为值。
以下代码在模板( templates)文件夹中保存为: hello.html。
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 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运行 -
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 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)
Lorsque le serveur de développement commence à s'exécuter, ouvrez le navigateur et entrez l'URL - http://localhost:5000/hello/maxsu
Le partie variable de l'URL est inséré à la place du jeton de remplacement {{name}}.
Jinja2Le moteur de modèle utilise les delimiters suivants pour s'échapper de l'HTML.
{% ... %} Pour des instructions en plusieurs lignes {{ ... }} Pour imprimer des expressions dans le modèle {# ... #} Pour les commentaires non inclus dans la sortie du modèle # ... ## Pour une instruction en ligne
Dans l'exemple suivant, une directive conditionnelle est démontrée dans le modèle. La règle d'URL de la fonction hello() accepte un paramètre entier. Il est transmis au modèle hello.html. À l'intérieur, la valeur du nombre (marque) reçu est comparée (supérieure ou inférieure50), donc une exécution conditionnelle de la sortie HTML a été effectuée.
Script Python suivant -
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 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)
Fichier modèle : hello.html Le script modèle HTML suivant -
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Exemple de modèle Flask</title> </head> <body> {% if marks>50 %} <h1>Passer l'examen !</h1> {% else %} <h1>Ne pas passer l'examen !</h1> {% endif %} </body> </html>
Veuillez noter que la directive conditionnelle if-else et endif sont inclus dans les delimiters {%..%.}
Exécutez le script Python et accédez à l'URL => http://localhost/hello/60, puis accédez à l'URL http://localhost/hello/59afin de visualiser les sorties HTML conditionnelles.
Les structures de boucle Python peuvent également être utilisées dans le modèle. Dans le script suivant, lorsque l'URL => http: est ouvert dans le navigateur,// localhost:5000/Lorsque result est appelé, la fonction result() envoie l'objet dictionnaire à la fichier modèle : results.html 。
result.html La partie modèle utilise une boucle for pour afficher les paires clé-valeur de l'objet dictionnaire result{} sous forme de cellules de tableau HTML.
Exécutez le code suivant dans le shell Python.
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 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)
Enregistrez le script HTML suivant dans le dossier de modèles ( templates) du fichier de modèle : result.html 。
# Fichier : example.py # Copyright : 2020 By w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Exemple de modèle Flask</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>
Ici, la déclaration Python correspondante à la boucle For est incluse dans {%...%}, et les clés et valeurs des expressions sont placées dans {{}}.
Après le lancement du développement, ouvrez http: dans le navigateur.//localhost:5000/resultat pour obtenir les sorties suivantes.