自带的模板引擎

直接用Python代码拼接HTML非常麻烦,还需要手动处理HTML转义防XSS攻击。
Flask内置 Jinja2模板引擎,实现HTML页面与Python业务代码分离。

用法

  1. 目录强制规范
    Flask默认去项目下 templates 文件夹寻找html模板文件,文件夹名称不能随意修改。
项目结构
├── app.py
├── static/        # 静态资源
└── templates/     # 模板文件夹(目录名约定俗成,不要修改)
    └── hello.htmlCode language: PHP (php)
  1. 核心函数:render_template()
  • 需要先导包:from flask import render_template
  • 第一个参数:模板html文件名
  • 后续传入关键字参数,作为变量传递到HTML模板中
return render_template('hello.html', name=name)
# 含义:打开templates/hello.html,把变量name传递给模板Code language: PHP (php)

路由示例

from flask import Flask, url_for, render_template

app = Flask(__name__)

# 两个路由,支持有无参数访问
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    # 将name变量传给hello.html模板
    return render_template('hello.html', name=name)

if __name__ == '__main__':
    app.run()Code language: PHP (php)

模板文件 hello.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask例子</title>
</head>
<body>
    <!-- {{ 变量名 }} 是Jinja2变量插值语法,输出变量 -->
    {{ name }}
</body>
</html>Code language: HTML, XML (xml)

{{ name }}:接收后端传来的变量,自动做HTML转义,防御XSS。

访问

  • 访问 http://127.0.0.1:5000/hello/ → name=None,页面空白
  • 访问 http://127.0.0.1:5000/hello/Tom → 页面输出 Tom

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注