扫码关注官方订阅号
想直接处理本地的csv文件内容,显示在html中,但csv里的数据过大,直接在html中会导致网页崩溃现在想处理这些数据 ,使他们能每100条一页分页显示,如何才能做到?网上的教程都比较模糊,并且大多数都以数据库的方式显示。想问问有没其他的方法?。
ringa_lee
使用csv直接渲染到html不太合理尤其是访问量很大的时候。
现在数据库支持csv很好,为什么不先导入一下呢,然后就以数据库的方式与html模板交互。
简单做了一个,大量数据会有性能问题,看看自己用生成器改下吧
views.py
from __future__ import pision from flask import Flask,request,url_for,g,render_template import csv import os from math import ceil app = Flask(__name__) @app.before_request def load_csv(): g.path = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data.csv') @app.route('/read_csv/page/<int:page_num>') def read_csv(page_num): ''' 目标url http://127.0.0.1:5000/read_csv/page/1?limit=100 ''' # 若不指定limits默认为100 limits = request.args.get('limits') if limits: limits = int(limits) else: limits=100 # 根据limits和所在页数生成数据 def show_csv(reader,page=page_num,limits=limits): df = [] for row in reader: if page_num*limits >= reader.line_num > (page_num-1)*limits: df.append(row) return df # 计算页面数 with open(g.path,'r+') as f: row_length = len(f.readlines()) pages = int(ceil(row_length/limits)) # 计算数据 with open(g.path,'r+') as f: reader = csv.reader(f) df = show_csv(reader,page_num,limits) return render_template('main.html',df=df,pages=pages,page_num=page_num,limits=limits) if '__main__' == __name__: app.run(debug=True)
main.html
<html> <p> {% for row in df %} <li>{{row}}</li> {% endfor %} <p> <hr> <p> {% for page in range(pages+1) %} <a href='{{url_for('read_csv',page_num=page,limits=limits)}}'>{{ loop.index }}</a> {% endfor %} </p> </html>
可以先用pandas的to_json方法把csv转换成json然后在restful里用views层生成接口,包括翻页功能等。
to_json
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
使用csv直接渲染到html不太合理尤其是访问量很大的时候。
现在数据库支持csv很好,为什么不先导入一下呢,然后就以数据库的方式与html模板交互。
简单做了一个,大量数据会有性能问题,看看自己用生成器改下吧
views.py
main.html
可以先用pandas的
to_json方法把csv转换成json然后在restful里用views层生成接口,包括翻页功能等。