python 中如何处理大量数据分页显示在html中?

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

阅读 9.8k
2 个回答

使用csv直接渲染到html不太合理尤其是访问量很大的时候。

现在数据库支持csv很好,为什么不先导入一下呢,然后就以数据库的方式与html模板交互。

简单做了一个,大量数据会有性能问题,看看自己用生成器改下吧

views.py

from __future__ import division
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>
<div>
{% for row in df %}
    <li>{{row}}</li>
{% endfor %}
<div>

<hr>

<div>
    {% for page in range(pages+1) %}
        <a href='{{url_for('read_csv',page_num=page,limits=limits)}}'>{{ loop.index }}</a>
    {% endfor %}
</div>
</html>

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题