flask - python 中如何处理大量数据分页显示在html中?
ringa_lee
ringa_lee 2017-04-18 09:47:53
[Python讨论组]

想直接处理本地的csv文件内容,显示在html中,
但csv里的数据过大,直接在html中会导致网页崩溃
现在想处理这些数据 ,使他们能每100条一页分页显示,如何才能做到?
网上的教程都比较模糊,并且大多数都以数据库的方式显示。
想问问有没其他的方法?。

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
高洛峰

使用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>
PHPz

可以先用pandas的to_json方法把csv转换成json
然后在restful里用views层生成接口,包括翻页功能等。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号