在烧瓶中使用搜索表格进行分页

时间:2020-06-05 13:20:08

标签: flask

我正在尝试使用flask对搜索选项进行分页。 我的代码正在工作。但是当我搜索“ tool1”时,它将显示在三页上。

如果我单击第二或下一页链接,那么它将刷新我的页面,其中包含表中总共8行的所有数据。

点击任意页码后,搜索到的数据每页应显示2条记录。

在这里我要纠正什么?

主要。 py

from flask import Flask, render_template, request, jsonify, redirect, url_for
import flask
from flask_paginate import Pagination, get_page_parameter
import json
import dbConnect
import datetime

app = Flask(__name__)
app.secret_key = "logger@!#$%^"

@app.route("/home",methods=['GET','POST'])
def home():
    toolName = None
    if "toolname" in request.form:
        toolName = request.form["toolname"]

    solution_data = solution_result(toolName)
    return render_template("home.html",solution_data=solution_data[0],pagination=solution_data[1])


def solution_result(toolName):

    # Setting page, limit and offset variables
    per_page = 2
    page = request.args.get(get_page_parameter(), type=int, default=1)
    offset = (page - 1) * per_page

    cursor = dbConnect.ConnectDatabase()

    # Executing a query to get the total number of products
    if toolName:
        total_sql = sql = "select tool from error_history where tool=%s"
        cursor.execute(total_sql,(toolName))
        total = cursor.fetchall()
    else:
        total_sql = sql = "select tool from error_history"
        cursor.execute(total_sql)
        total = cursor.fetchall()

    # execute SQL query using execute() method.
    if toolName:
        sql = "select id, tool, error from error_history where tool=%s ORDER BY id DESC LIMIT %s OFFSET %s"
        cursor.execute(sql,(toolName,per_page, offset))
    else:
        sql = "select id, tool, error from error_history ORDER BY id DESC LIMIT %s OFFSET %s"
        cursor.execute(sql,(per_page, offset))

    result = cursor.fetchall()

    # Setting up the pagination variable, where you are using len(total) to set the total number of 
    # items available
    pagination = Pagination(page=page, per_page=per_page, offset=offset, total=len(total), 
    record_name='products',css_framework='bootstrap3')

    dbConnect.closeConnection()
    return result, pagination

if __name__ == "__main__":
    app.run(debug=True)

dbConnect.py

import pymysql
client = None
def ConnectDatabase():
    try:
        global client
        # Open database connection
        client = pymysql.connect("localhost","root","","solution")
        # makes autocommit false
        client.autocommit(False)
        # prepare a cursor object using cursor() method
        cursor = client.cursor()
        #print("******** database connected ****")
        return cursor
    except:
        print("******** database not connected ****")

def closeConnection():
    global client
    client.close()

if __name__ == "__main__":
    ConnectDatabase()

solution.error_history表

CREATE TABLE `error_history` (
  `id` int(11) NOT NULL,
  `tool` varchar(255) NOT NULL,
  `error` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `error_history` (`id`, `tool`, `error`) VALUES
(1, 'tool1', 'error in toola'),
(2, 'tool2', 'error in toole'),
(3, 'tool3', 'error in place'),
(4, 'tool1', 'error in toolh'),
(5, 'tool1', 'error in toolo'),
(6, 'tool1', 'error in tool123'),
(7, 'tool1', 'error in toolxy'),
(8, 'tool2', 'error in toolxyz');

ALTER TABLE `error_history`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `error_history`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

home.html

<!DOCTYPE html>
<html lang="en" dir="DataLogger">
  <head>
    <meta charset="utf-8">
    <title>Data</title>

    <style>
        .pagination-page-info {
            padding: .6em;
            padding-left: 0;
            width: 40em;
            margin: .5em;
            margin-left: 0;
            font-size: 12px;
        }
        .pagination-page-info b {
            color: black;
            background: #6aa6ed;
            padding-left: 2px;
            padding: .1em .25em;
            font-size: 150%;
        }
    </style>
  </head>
  <body>
   <div class="wrapper">
    {% block content %}

     <div id="Sidebar">

     </div>

    <!-- Page Content Holder -->
     <div id="content" >



        <p class="" style="font-weight: bold;">Dashboard</p>

        <div class="row">
            <form  name="searchForm" action="{{ url_for('home') }}" method="POST" >
                <div class="form-group col-xs-10 col-sm-4 col-md-4 col-lg-4">
                   <input type="input" class="form-control" id="toolname" name="toolname" placeholder="Search tool"
                          value="" required>
                </div>
                <div class="form-group col-xs-10 col-sm-4 col-md-4 col-lg-4">
                    <button type="submit" class="btn btn-primary">Search</button>
                </div>
            </form>
        </div>


        <div class="row col-xs-10 col-sm-4 col-md-4 col-lg-12">
            {{ pagination.info }}
        </div>
        <div class="row  table-responsive col-xs-10 col-sm-4 col-md-4 col-lg-12">

            <table class="table table-bordered solutionTable ">
            <thead class="">
              <tr>
                <th>Sl No.</th>
                <th>Tool</th>
                <th>error</th>
              </tr>
            </thead>
            <tbody>
                {% for row in solution_data %}

                    <tr>
                        <td>{{loop.index + (pagination.page - 1) * pagination.per_page }}</td>
                        <td>{{ row[1] }}</td>
                        <td>{{ row[2] }}</td>
                     </tr>
                {% endfor %}
            </tbody>
          </table>

        </div>
        <div class="row  col-xs-10 col-sm-4 col-md-4 col-lg-12">
            {{ pagination.links }}
        </div>
        <!-- Page Content Holder --> 
    </div>
     {% endblock %}
  </body>
</html>

0 个答案:

没有答案