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

如何通过Flask实现点击链接展示CSV文件内容?

实现Flask点击链接展示CSV文件内容的方案

问题修正与核心实现思路

你当前的HTML模板已经生成了跳转链接,但存在两个小问题:循环内未闭合<tr>标签、行号固定为1;另外缺少对应的Flask视图函数处理CSV内容的读取与展示。以下是完整实现步骤:

步骤1:修复HTML模板

{% extends 'base.html' %} {% block title %}Home{% endblock %}
{% block content %}
<br />
<table class="table table-bordered table-hover">
    <caption> Files Uploaded</caption>
    <tr>
        <th class="table-light"> # </th>
        <th class="table-light">File Name</th>
        <th class="table-light">Date</th>
        <th class="table-light">Access Data</th>
    </tr>

{% for file in csv_file %}
<tr>
    <th scope="row">{{ loop.index }}</th>
    <td>{{ file.data }}</td>
    <td>{{ file.date }}</td>
    <td><a href="{{ url_for('views.data_analytics', filename=file.data) }}">View Data</a></td>
</tr>
{%endfor%}
</table>
{% endblock %}

注:补上了循环内缺失的</tr>标签,将固定行号改为loop.index实现动态编号,同时把URL参数名改为更清晰的filename。

步骤2:编写Flask视图函数

在views.py中添加以下代码,负责读取CSV文件并渲染到页面:

from flask import render_template, request, abort
import csv
import os

# 替换为你实际存储上传CSV文件的目录,确保该目录存在且有读取权限
UPLOAD_FOLDER = 'your/upload/directory/path'

@views.route('/data-analytics')
def data_analytics():
    # 获取URL中的文件名参数
    filename = request.args.get('filename')
    if not filename:
        abort(400, description="缺少文件名参数")
    
    # 构造安全的文件路径,防止路径遍历攻击
    file_path = os.path.join(UPLOAD_FOLDER, filename)
    # 校验文件合法性
    if not os.path.exists(file_path) or not filename.endswith('.csv'):
        abort(404, description="文件不存在或不是CSV格式")
    
    # 读取CSV内容
    csv_content = []
    with open(file_path, 'r', encoding='utf-8') as f:
        csv_reader = csv.reader(f)
        for row in csv_reader:
            csv_content.append(row)
    
    # 渲染CSV内容页面
    return render_template('csv_view.html', filename=filename, csv_data=csv_content)

步骤3:创建CSV内容展示模板

新建csv_view.html文件,用于格式化展示CSV数据:

{% extends 'base.html' %} {% block title %}{{ filename }}{% endblock %}
{% block content %}
<h2 align="center">{{ filename }} 文件内容</h2>
<br>
<table class="table table-bordered table-hover">
    {% for row in csv_data %}
    <tr>
        {% for cell in row %}
        <td>{{ cell }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</table>
{% endblock %}

关键注意事项

  • 路径安全:必须使用os.path.join构造文件路径,禁止直接拼接用户传入的文件名,避免路径遍历攻击(如用户传入../secret.txt)。
  • 权限校验:确保Flask运行进程对UPLOAD_FOLDER目录有读取权限。
  • 错误处理:添加参数缺失、文件不存在、非CSV文件的错误拦截,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:40:34