English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Flask可以以HTML形式返回绑定到某个URL的函数的输出。 例如,在以下脚本中,hello()函数将使用附加的<h1>标记呈现 'Hello World' 。
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 from flask import Flask app = Flask(__name__) @app.ruta('/) 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文件。
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 from flask import Flask app = Flask(__name__) @app.ruta('/) def index(): return render_template('hello.html') if __name__ == '__main__': app.run(debug = True)
Flask将尝试在该脚本所在的同一文件夹中查找templates文件夹中的HTML文件。使用模板的应用程序目录结构如下所示 -
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 app.py hello.py templates hello.html register.html ....
术语“Web模板系统”是指设计一个HTML脚本,其中可以动态插入变量数据。 Web模板系统由模板引擎,某种数据源和模板处理器组成。
Flask使用jinga2模板引擎。 Web模板包含用于变量和表达式(这些情况下为Python表达式)的HTML语法散布占位符,这些变量和表达式在模板呈现时被替换为值。
以下代码在模板( templates)文件夹中保存为: hello.html。
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 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运行 -
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 from flask import Flask, render_template app = Flask(__name__) @app.ruta('/hello/<user>') def hello_name(user): return render_template('hello.html', nombre = usuario)}} if __name__ == '__main__': app.run(debug = True)
Al comenzar a ejecutar el servidor de desarrollo, abra el navegador e ingrese la URL como - http://localhost:5000/hello/maxsu
La parte variable de la URL se inserta en el lugar del marcador de posición {{name}}.
Jinja2El motor de plantillas utiliza los siguientes delimitadores para escapar desde HTML.
{% ... %} para instrucciones en múltiples líneas {{ ... }} para imprimir expresiones en la plantilla {# ... #} para comentarios que no se incluyen en la salida de la plantilla # ... ## para una sola línea de comando
En el siguiente ejemplo, se muestra cómo se utiliza una语句if en la plantilla. La regla de URL de la función hello() acepta un parámetro entero. Se lo pasa a la plantilla hello.html. Dentro de ella, se compara el valor recibido (puntuación) con (mayor o menor que50), por lo que se ha ejecutado la renderización condicional en HTML.
El script de Python es el siguiente -
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 from flask import Flask, render_template app = Flask(__name__) @app.ruta('/hello/<int:puntuación'> def hello_name(puntuación): return render_template('hello.html', puntuación = puntuación) if __name__ == '__main__': app.run(debug = True)
Archivo de plantilla: hello.html El script de plantilla HTML es el siguiente -
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> Ejemplo de plantilla de Flask</title> </head> <body> {% if puntuación>50 %} <h1> ¡Ha aprobado el examen! </h1> {% else %} <h1>¡No ha aprobado el examen! </h1> {% endif %} </body> </html>
Tenga en cuenta que la语句if-else y endif están contenidos en los delimitadores {%..%。%}
Ejecute el script de Python y acceda a la URL => http://localhost/hello/60, luego acceda a http://localhost/hello/59, para ver la salida HTML de manera condicional.
Las estructuras de bucle de Python también se pueden usar dentro de la plantilla. En el siguiente script, al abrir la URL en el navegador => http:// localhost:5000/Cuando se llama a result, la función resultado() envía el objeto de diccionario a la archivo de plantilla: results.html 。
result.html La parte de plantilla utiliza un bucle for para presentar el par clave-valor del objeto de diccionario resultado{} como celdas de una tabla HTML.
Ejecute el siguiente código en el shell de Python.
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 from flask import Flask, render_template app = Flask(__name__) @app.ruta('/resultado()) def resultado(): dict = {'phy':59,'che':60, 'matemáticas':90 return render_template('result.html', result = dict)} if __name__ == '__main__': app.run(debug = True)
Guarde el siguiente script HTML en la carpeta de plantillas ( templates) el archivo de plantilla: result.html 。
# Nombre de archivo: example.py # Derechos de autor: 2020 Por w3codebox # Autor por: es.oldtoolbag.com # Fecha: 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> Ejemplo de plantilla de 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>
Aquí, la declaración de Python correspondiente al bucle For se encuentra dentro de {%...%}, mientras que las claves y valores de la expresión se colocan en {{}}.
Después de que el desarrollo comience a ejecutarse, abra http: en el navegador.//localhost:5000/result para obtener la siguiente salida.