You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动