目录
一、实战场景
python 如何使用 pandas 在 flask web 网页中分页显示 csv 文件数据
二、知识点
python 基础语法
python 文件读写
python 分页
pandas 数据处理
flask web 框架
jinja 模版
三、菜鸟实战
初始化 Flask 框架,设置路由
  
   - 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      Description: 分页读取并显示 csv 文件数据
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      from math 
      import ceil
     
    
- 
    
     
    
    
     
      import csv
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      from flask 
      import Flask, render_template, request, redirect
     
    
- 
    
     
    
    
     
      from spiders.file_manager 
      import FileManager
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      # 初始化框架
     
    
- 
    
     
    
    
     
      web = Flask(__name__)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      @web.route('/')
     
    
- 
    
     
    
    
     
      def 
      index():
     
    
- 
    
     
    
    
         
      # 首页
     
    
- 
    
     
    
    
         
      return redirect(
      '/table/1')
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      @web.route('/table/<int:page_num>')
     
    
- 
    
     
    
    
     
      def 
      table(
      page_num):
     
    
- 
    
     
    
    
         
      # 分页读取并显示 csv 文件数据
     
    
- 
    
     
    
    
     
          file_manager = FileManager()
     
    
- 
    
     
    
    
     
          file = file_manager.get_data_file_path(
      "tao365_detail.csv")
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         
      # 若不指定limits默认为 5
     
    
- 
    
     
    
    
     
          limits = request.args.get(
      'limits', 
      5, 
      type=
      int)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         
      def 
      show_csv(
      reader, page=page_num, limits=limits):
     
    
- 
    
     
    
    
             
      # 内部函数,根据limits和所在页数生成数据
     
    
- 
    
     
    
    
     
              df = []
     
    
- 
    
     
    
    
             
      for row 
      in reader:
     
    
- 
    
     
    
    
                 
      if page_num * limits >= (reader.line_num - 
      1) > (page_num - 
      1) * limits:
     
    
- 
    
     
    
    
     
                      df.append(row)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             
      return df
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         
      with 
      open(file, 
      'r+', encoding=
      'utf-8') 
      as f:
     
    
- 
    
     
    
    
             
      # 计算页面数
     
    
- 
    
     
    
    
     
              row_length = 
      len(f.readlines()) - 
      1
     
    
- 
    
     
    
    
     
              pages = 
      int(ceil(row_length / limits))
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         
      with 
      open(file, 
      'r+', encoding=
      'utf-8') 
      as f:
     
    
- 
    
     
    
    
             
      # 计算数据
     
    
- 
    
     
    
    
     
              reader = csv.reader(f)
     
    
- 
    
     
    
    
             
      next(reader)
     
    
- 
    
     
    
    
     
              df = show_csv(reader, page_num, limits)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         
      # 加载模版和模版数据
     
    
- 
    
     
    
    
         
      return render_template(
      'table.html', df=df, pages=pages, page_num=page_num, limits=limits)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      @web.route('/table_detail')
     
    
- 
    
     
    
    
     
      def 
      table_detail():
     
    
- 
    
     
    
    
         
      # 二手房详情
     
    
- 
    
     
    
    
     
          row = request.args.get(
      'row').split(
      ',')
     
    
- 
    
     
    
    
         
      return render_template(
      'table_detail.html', row=row)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      # 启动 flask web 框架
     
    
- 
    
     
    
    
     
      web.run(debug=
      True)
     
    
 jinja 模版 渲染列表数据
  
   - 
    
     
    
    
     
      <section id="team" class="header">
     
    
- 
    
     
    
    
         
      <div class="container">
     
    
- 
    
     
    
    
             
      <div class="section-title">
     
    
- 
    
     
    
    
                 
      <h2> pandas 在网页中分页显示 csv 文件
      </h2>
     
    
- 
    
     
    
    
                 
      <p>使用 Python、pandas、bootstrap、flask 框架等技术实现
      </p>
     
    
- 
    
     
    
    
             
      </div>
     
    
- 
    
     
    
    
             
      <!-- ======= 预览板块 ======= -->
     
    
- 
    
     
    
    
             
      <section class="counts section-bg">
     
    
- 
    
     
    
    
                 
      <div class="container">
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                     
      <div class="row">
     
    
- 
    
     
    
    
                         
      <div class="col">
     
    
- 
    
     
    
    
                             
      <!-- ======= 使用表格循环展示数据 ======= -->
     
    
- 
    
     
    
    
                             
      <table class="table table-striped table-hover" style="">
     
    
- 
    
     
    
    
                                 
      <tbody>
     
    
- 
    
     
    
    
                                     
      <tr>
     
    
- 
    
     
    
    
                                         
      <th>标题
      </th>
     
    
- 
    
     
    
    
                                         
      <th>价格
      </th>
     
    
- 
    
     
    
    
                                         
      <th>每平方价格
      </th>
     
    
- 
    
     
    
    
                                         
      <!-- <th>小区</th> -->
     
    
- 
    
     
    
    
                                         
      <!-- <th>地址</th> -->
     
    
- 
    
     
    
    
                                         
      <th>房屋户型
      </th>
     
    
- 
    
     
    
    
                                         
      <th>建筑面积
      </th>
     
    
- 
    
     
    
    
                                         
      <th>所在楼层
      </th>
     
    
- 
    
     
    
    
                                         
      <th>房屋朝向
      </th>
     
    
- 
    
     
    
    
                                         
      <th>建筑年代
      </th>
     
    
- 
    
     
    
    
                                         
      <th>详情
      </th>
     
    
- 
    
     
    
    
                                     
      </tr>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                                      {% for row in df %}
     
    
- 
    
     
    
    
                                     
      <!-- <li>{{row}}</li> -->
     
    
- 
    
     
    
    
                                     
      <tr class="alt">
     
    
- 
    
     
    
    
     
                                          {% for subrow in row %} {% if loop.index != 5 and loop.index != 4 %}
     
    
- 
    
     
    
    
                                         
      <td>{{subrow}}
      </td>
     
    
- 
    
     
    
    
     
                                          {% endif %} {% endfor %}
     
    
- 
    
     
    
    
                                         
      <td>
      <a class="link-table" data-row="{{row}}" href="/table_detail">点击查看
      </a> 
      </td>
     
    
- 
    
     
    
    
                                     
      </tr>
     
    
- 
    
     
    
    
     
                                      {% endfor %}
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                                 
      </tbody>
     
    
- 
    
     
    
    
                             
      </table>
     
    
- 
    
     
    
    
                         
      </div>
     
    
- 
    
     
    
    
                     
      </div>
     
    
- 
    
     
    
    
                     
      <div id="demo" style="display: flex;justify-content: center;">
      </div>
     
    
- 
    
     
    
    
                 
      </div>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             
      </section>
     
    
- 
    
     
    
    
             
      <!-- End Counts Section -->
     
    
- 
    
     
    
    
         
      </div>
     
    
- 
    
     
    
    
     
      </section>
     
    
 分页请求数据
  
   - 
    
     
    
    
     
      $(
      document).
      ready(
      function(
      ) {
     
    
- 
    
     
    
    
     
          $(
      '.link-table').
      each(
      function(
      ) {
     
    
- 
    
     
    
    
             
      var row = $(
      this).
      attr(
      'data-row')
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             
      var row1 = 
      eval(
      '(' + row + 
      ')').
      join(
      ',')
     
    
- 
    
     
    
    
     
              $(
      this).
      attr(
      'href', 
      '/table_detail?row=' + row1)
     
    
- 
    
     
    
    
     
          })
     
    
- 
    
     
    
    
     
          layui.
      use([
      'laypage', 
      'layer'], 
      function(
      ) {
     
    
- 
    
     
    
    
             
      var laypage = layui.
      laypage,
     
    
- 
    
     
    
    
     
                  layer = layui.
      layer;
     
    
- 
    
     
    
    
     
              laypage.
      render({
     
    
- 
    
     
    
    
                 
      elem: 
      'demo',
     
    
- 
    
     
    
    
                 
      count: 
      "{{pages}}",
     
    
- 
    
     
    
    
                 
      curr: 
      "{{ page_num }}",
     
    
- 
    
     
    
    
                 
      theme: 
      '#587187',
     
    
- 
    
     
    
    
                 
      // limit: pageSize //一页数据
     
    
- 
    
     
    
    
                 
      jump: 
      function(
      obj, first) {
     
    
- 
    
     
    
    
                     
      console.
      log(obj.
      curr, first)
     
    
- 
    
     
    
    
                     
      if (!first) {
     
    
- 
    
     
    
    
                         
      window.
      location.
      href = 
      "/table/" + obj.
      curr; 
      //跳转链接
     
    
- 
    
     
    
    
     
                      }
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
     
              });
     
    
- 
    
     
    
    
     
          });
     
    
- 
    
     
    
    
     
      })
     
    
 显示详情页数据示例
  
   - 
    
     
    
    
     
      <section id="team" class="header">
     
    
- 
    
     
    
    
         
      <div class="container">
     
    
- 
    
     
    
    
             
      <div class="section-title">
     
    
- 
    
     
    
    
                 
      <h2>pandas 在网页中分页显示 csv 文件 - 详情页数据示例
      </h2>
     
    
- 
    
     
    
    
                 
      <p>使用 Python、pandas、bootstrap、flask 框架等技术实现
      </p>
     
    
- 
    
     
    
    
             
      </div>
     
    
- 
    
     
    
    
             
      <!-- ======= 预览板块 ======= -->
     
    
- 
    
     
    
    
             
      <section class="counts section-bg">
     
    
- 
    
     
    
    
                 
      <div class="container">
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                     
      <div class="detail__mainCotetnL fl">
     
    
- 
    
     
    
    
                         
      <table class="table table-striped table-hover" style="">
     
    
- 
    
     
    
    
                             
      <tbody>
     
    
- 
    
     
    
    
                                 
      <tr>
     
    
- 
    
     
    
    
                                     
      <td>标题
      </td>
     
    
- 
    
     
    
    
                                     
      <td colspan="3">{{row[0]}}
      </td>
     
    
- 
    
     
    
    
                                 
      </tr>
     
    
- 
    
     
    
    
                                 
      <tr>
     
    
- 
    
     
    
    
                                     
      <td>价格
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[1]}}
      </td>
     
    
- 
    
     
    
    
                                     
      <td>每平方价格
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[2]}}
      </td>
     
    
- 
    
     
    
    
                                 
      </tr>
     
    
- 
    
     
    
    
                                 
      <tr>
     
    
- 
    
     
    
    
                                     
      <td>房屋户型
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[5]}}
      </td>
     
    
- 
    
     
    
    
                                     
      <td>建筑面积
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[6]}}
      </td>
     
    
- 
    
     
    
    
                                 
      </tr>
     
    
- 
    
     
    
    
                                 
      <tr>
     
    
- 
    
     
    
    
                                     
      <td>所在楼层
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[7]}}
      </td>
     
    
- 
    
     
    
    
                                     
      <td>房屋朝向
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[8]}}
      </td>
     
    
- 
    
     
    
    
                                 
      </tr>
     
    
- 
    
     
    
    
                                 
      <tr>
     
    
- 
    
     
    
    
                                     
      <td>建筑年代
      </td>
     
    
- 
    
     
    
    
                                     
      <td>{{row[9]}}
      </td>
     
    
- 
    
     
    
    
                                     
      <td>
      </td>
     
    
- 
    
     
    
    
                                     
      <td>
      </td>
     
    
- 
    
     
    
    
                                 
      </tr>
     
    
- 
    
     
    
    
                             
      </tbody>
     
    
- 
    
     
    
    
                         
      </table>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                     
      </div>
     
    
- 
    
     
    
    
                 
      </div>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             
      </section>
     
    
- 
    
     
    
    
             
      <!-- End Counts Section -->
     
    
- 
    
     
    
    
         
      </div>
     
    
- 
    
     
    
    
     
      </section>
     
    
 运行结果
运行截图
* Serving Flask app 'app_tao04'
* Debug mode: on
* Running on http://127.0.0.1:5000

浏览器中打开 http://127.0.0.1:5000
列表页数据示例

详情页数据示例

菜鸟实战,持续学习!
转载:https://blog.csdn.net/qq_39816613/article/details/128592794
查看评论
					 
					