You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask如何向非templates目录的index.html传递数据并渲染

实现方法

你可以根据需求选择Flask适配方案或者无框架静态方案,都不需要把index.html移动到templates文件夹。

方案一:保留Flask框架

方法1:修改Flask默认模板路径

Flask初始化时支持自定义模板查找目录,直接将模板目录指向项目根目录即可,原有Jinja2模板的变量写法完全不需要改动。
修改main.py的Flask初始化部分:

from flask import Flask, render_template
# template_folder='.' 即指定当前项目根目录为模板查找路径
app = Flask(__name__, template_folder='.')
from bs4 import BeautifulSoup
import requests

# 原有爬虫逻辑无需改动
url = "https://example.com" 
req = requests.get(url)
bs0bj = BeautifulSoup(req.text, "html.parser")
data = bs0bj.find_all('div', {"class": "exampleClass"})[0].text.strip()

@app.route('/')
def home():
    # 直接读取根目录下的index.html完成渲染
    return render_template('index.html', data=data)

if __name__ == '__main__':
    app.run()

方法2:手动读取文件替换内容

如果不想依赖Flask的模板渲染机制,可以直接手动读取根目录的index.html,替换占位符后返回响应,完全绕开模板规则:

from flask import Flask
import html
app = Flask(__name__)
from bs4 import BeautifulSoup
import requests

# 原有爬虫逻辑
url = "https://example.com" 
req = requests.get(url)
bs0bj = BeautifulSoup(req.text, "html.parser")
data = bs0bj.find_all('div', {"class": "exampleClass"})[0].text.strip()

@app.route('/')
def home():
    with open('index.html', 'r', encoding='utf-8') as f:
        page = f.read()
    # 转义特殊字符避免破坏页面结构
    safe_data = html.escape(data)
    page = page.replace('{{data}}', safe_data)
    return page

方案二:不使用Flask,直接生成静态页面

如果不需要动态接口能力,完全可以在爬虫执行完成后直接把数据写入根目录的index.html,不需要启动Web框架做数据传递,后续用任意静态文件服务托管根目录即可,资源占用更低。
实现代码:

from bs4 import BeautifulSoup
import requests
import html

# 爬虫逻辑
url = "https://example.com" 
req = requests.get(url)
bs0bj = BeautifulSoup(req.text, "html.parser")
data = bs0bj.find_all('div', {"class": "exampleClass"})[0].text.strip()
safe_data = html.escape(data)

# 替换模板内容后写回index.html
with open('index.html', 'r', encoding='utf-8') as f:
    page = f.read()
page = page.replace('{{data}}', safe_data)
with open('index.html', 'w', encoding='utf-8') as f:
    f.write(page)

如果需要在服务器对外提供访问,直接在项目根目录执行python -m http.server 你要用的端口号就能启动静态服务,不需要额外安装依赖。
注意:如果需要定时更新数据,把上述爬虫+写文件的逻辑做成定时任务即可,不需要常驻运行Web服务。

内容的提问来源于stack exchange,提问作者user19475843

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:27:25