Flask技术问询:如何将Python脚本数据传递至HTML模板
没问题!把Python列表数据传递到HTML模板里其实有好几种实用的方案,我给你整理了最常用的两种,一步步跟着来就行:
方案1:用Flask + Jinja2模板(适合Web服务场景)
这是最常用的Web开发模式,Flask自带的Jinja2模板引擎能轻松帮你把Python数据渲染到HTML里。
步骤1:安装依赖
先装Flask:
pip install flask
步骤2:编写你的Python脚本(script.py)
这里我们把返回列表的逻辑和Flask的路由结合起来:
# script.py from flask import Flask, render_template app = Flask(__name__) # 你的数据生成函数,返回需要传递的列表 def get_data_list(): # 这里替换成你实际的业务逻辑,比如从数据库/文件读取数据 return ["苹果", "香蕉", "橙子", "葡萄"] # 定义路由,访问根路径时渲染模板并传递数据 @app.route('/') def show_list(): # 获取列表数据 items = get_data_list() # 把数据传递给HTML模板,第二个参数是模板里要用的变量名 return render_template('index.html', items=items) if __name__ == '__main__': # 启动开发服务器,debug=True方便调试 app.run(debug=True)
步骤3:编写HTML模板
在当前目录下创建一个templates文件夹(Flask默认会找这个文件夹里的模板),然后新建index.html:
<!-- templates/index.html --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>我的列表页面</title> </head> <body> <h1>水果列表</h1> <!-- 用Jinja2的for循环遍历传递过来的items列表 --> <ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul> </body> </html>
运行效果
执行python script.py,然后打开浏览器访问http://localhost:5000,就能看到渲染好的列表页面了!
方案2:直接用Jinja2生成静态HTML(适合不需要Web服务的场景)
如果只是想生成静态HTML文件(比如导出报告、静态页面),可以直接用Jinja2模板引擎单独处理,不需要启动Web服务。
步骤1:安装依赖
pip install jinja2
步骤2:编写Python脚本(script.py)
# script.py from jinja2 import Environment, FileSystemLoader def get_data_list(): return ["苹果", "香蕉", "橙子", "葡萄"] # 初始化模板环境,指定模板所在的文件夹 env = Environment(loader=FileSystemLoader('templates')) # 加载对应的模板文件 template = env.get_template('static_list.html') # 获取数据并渲染模板 items = get_data_list() rendered_html = template.render(items=items) # 把渲染后的内容保存为静态HTML文件 with open('output.html', 'w', encoding='utf-8') as f: f.write(rendered_html)
步骤3:编写HTML模板
同样在templates文件夹里新建static_list.html:
<!-- templates/static_list.html --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>静态生成的列表</title> </head> <body> <h1>我的静态列表</h1> <div style="margin: 20px;"> {% for item in items %} <p style="font-size: 18px;">{{ item }}</p> {% endfor %} </div> </body> </html>
运行效果
执行python script.py,当前目录会生成output.html,直接用浏览器打开就能看到渲染好的内容。
一些小提示
- 如果你的列表元素是字典(比如
[{"name":"苹果", "price":5}, {"name":"香蕉", "price":3}]),模板里可以用{{ item.name }}、{{ item.price }}来访问具体属性 - Jinja2还有很多实用语法,比如条件判断:
{% if item == "苹果" %}<li style="color: red;">{{ item }}</li>{% else %}<li>{{ item }}</li>{% endif %} - 如果是大型项目,Django框架的模板系统逻辑类似,只是配置方式略有不同
内容的提问来源于stack exchange,提问作者Shinomoto Asakura




