Flask 分页

from math import ceil

import csv

import codecs

 

@app.before_request

def load_csv():

    g.path = 'C:\\12.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)

    """

 

    # 计算数据

    with open(g.path,'r+') as f:

        reader = csv.reader(f)

        df = show_csv(reader,page_num,limits)

 

 

    return render_template('csv2.html',df=df,pages=pages,page_num=page_num,limits=limits)

 

 

 

<html>

 

<style type="text/css"> 

#customers 

  { 

  font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; 

  width:100%; 

  border-collapse:collapse; 

  } 

 

#customers td, #customers th  

  { 

  font-size:1em; 

  border:1px solid #98bf21; 

  padding:3px 7px 2px 7px; 

  } 

 

#customers th  

  { 

  font-size:1.1em; 

  text-align:left; 

  padding-top:5px; 

  padding-bottom:4px; 

  background-color:#A7C942; 

  color:#ffffff; 

  } 

 

#customers tr.alt td  

  { 

  color:#000000; 

  background-color:#EAF2D3; 

  } 

 

 

</style> 

 

<div>

 

<table id="customers"> 

<tr> 

<th>用户标示</th> 

<th>客户端版本</th> 

<th>按钮ID</th>

<th>软件名</th> 

<th>次数</th> 

<th>命令字</th> 

<th>32位或64位</th> 

<th>计数值</th> 

</tr>

 

{% for row in df %}

 

    <!-- <li>{{row}}</li> -->

         {% if loop.index % 2 != 0 %}

         <tr>

         {% else %}

         <tr class="alt">

         {% endif %}

        

         {% for subrow in row %}

         <td>{{subrow}}</td> 

         {% endfor %}

         </tr>

        

{% endfor %}

 

</table> 

<div>

 

 

 

<style type="text/css">

 

BODY {

FONT-SIZE: 12px;FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;

WIDTH: 60%; PADDING-LEFT: 25px;

}

/*CSS green-black style pagination*/

DIV.green-black {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px;

MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

DIV.green-black A {

BORDER-RIGHT: #2c2c2c 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #2c2c2c 1px solid;

 PADDING-LEFT: 5px; BACKGROUND: url(images/pageimage1.gif) #2c2c2c;

PADDING-BOTTOM: 2px; BORDER-LEFT: #2c2c2c 1px solid; COLOR: #fff;

MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #2c2c2c 1px solid; TEXT-DECORATION: none

}

DIV.green-black A:hover {

BORDER-RIGHT: #aad83e 1px solid; BORDER-TOP: #aad83e 1px solid;

 BACKGROUND: url(images/pageimage2.gif) #aad83e; BORDER-LEFT: #aad83e 1px solid;

 COLOR: #fff; BORDER-BOTTOM: #aad83e 1px solid

}

DIV.green-black A:active {

BORDER-RIGHT: #aad83e 1px solid; BORDER-TOP: #aad83e 1px solid;

BACKGROUND: url(images/pageimage2.gif) #aad83e; BORDER-LEFT: #aad83e 1px solid;

 COLOR: #fff; BORDER-BOTTOM: #aad83e 1px solid

}

DIV.green-black SPAN.current {

BORDER-RIGHT: #aad83e 1px solid; PADDING-RIGHT: 5px;

BORDER-TOP: #aad83e 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold;

BACKGROUND: url(images/pageimage2.gif) #aad83e; PADDING-BOTTOM: 2px;

BORDER-LEFT: #aad83e 1px solid; COLOR: #fff; MARGIN-RIGHT: 2px;

PADDING-TOP: 2px; BORDER-BOTTOM: #aad83e 1px solid

}

DIV.green-black SPAN.disabled {

BORDER-RIGHT: #f3f3f3 1px solid; PADDING-RIGHT: 5px;

BORDER-TOP: #f3f3f3 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px;

 BORDER-LEFT: #f3f3f3 1px solid; COLOR: #ccc; MARGIN-RIGHT: 2px;

 PADDING-TOP: 2px; BORDER-BOTTOM: #f3f3f3 1px solid

}

 

</style>

 

 

<body>

 

<br>

<br>

<div class="green-black">

{% if page_num == 1 %}

         <span class="disabled"> &lt; Prev</span>

{% else %}

         <a href='{{url_for('read_csv',page_num=page_num - 1,limits=limits)}}'> &lt; Prev  </a>

{% endif %}

 

    {% for page in range(pages+1) %}

                   {% if page_num == page + 1 %}

                   <span class="current">

                   {{ loop.index }}

                   </span>

                  

                   {% else %}

                    <a href='{{url_for('read_csv',page_num=page + 1, limits=limits)}}'>{{ loop.index }}</a>

                   {% endif %}

    {% endfor %}

        

{% if page_num == pages + 1 %}

         <span class="disabled">>Next &gt;</span>

{% else %}

         <a href='{{url_for('read_csv',page_num=page_num + 1,limits=limits)}}'> Next &gt; </a>

{% endif %}

 

<style type="text/css"> 

h1 {color:red; font-size:14px;}

</style>

 

<h1 > xxxxxx</h1>

 

</div>

</body>

</html>

 

转载于:https://www.cnblogs.com/sysnap/p/6830141.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值