Python利用flask sqlalchemy实现分页效果

下面为你详细讲解如何利用flask sqlalchemy实现分页效果。

准备工作

首先,我们需要安装flask sqlalchemy包,可以通过 pip install flask_sqlalchemy 命令进行安装。另外,我们还需要创建一个用于存储数据的数据库。这里我们使用sqlite作为数据库,创建一个名为example.db的数据库文件,以存储数据。

创建model

在创建分页效果之前,我们需要先创建一个模型来描述我们要分页查询的数据。在本例中,我们以文章作为数据来源,创建一个名为Article的Model,如下所示:

from app import db

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)

在这个模型中,我们定义了id、title和content三个字段,分别用于存储文章的编号、标题和内容。

创建视图函数

接下来,我们需要创建一个视图函数,用于处理分页请求。在这个函数中,我们需要获取当前页码、每页显示的文章数量,计算出该页面应显示的文章范围,再从数据库中获取相关文章,并返回给客户端。

from flask import Blueprint, render_template, request
from app.models import Article

pagination = Blueprint('pagination', __name__)

@pagination.route('/')
def index():
    # 获取当前页码,默认为1
    page = request.args.get('page', 1, type=int)

    # 获取每页显示的文章数量,默认为10
    per_page = request.args.get('per_page', 10, type=int)

    # 计算当前页面应显示的文章范围
    start = (page - 1) * per_page
    end = start + per_page

    # 从数据库中获取相关文章
    articles = Article.query.slice(start, end)

    # 计算总文章数
    total = Article.query.count()

    return render_template('index.html', articles=articles, total=total, page=page, per_page=per_page)

在这个视图函数中,我们首先通过request.args.get()方法获取当前页码和每页显示的文章数量,在没有指定的情况下,分别默认设为1和10。接着,我们根据当前页码和每页显示的文章数量,计算出该页面应显示的文章范围,使用slice()方法从数据库中获取相关文章。最后,我们还需要通过query.count()方法计算出总共有多少篇文章,以便于在页面中计算页数和显示分页控件。

编写模板页面

最后,我们需要编写模板页面,将获取到的文章列表渲染到页面上。在模板中,我们可以使用flask自带的分页控件,来快速实现分页效果。具体代码如下:

{% extends 'base.html' %}

{% block content %}
    <h1>文章列表</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }}</li>
            <p>{{ article.content }}</p>
        {% endfor %}
    </ul>

    {% if total > per_page %}
        <div class="pagination">
            {% if page > 1 %}
                <a href="{{ url_for('pagination.index', page=page-1) }}">上一页</a>
            {% endif %}

            {% if page > 2 %}
                <a href="{{ url_for('pagination.index', page=1) }}">1</a>
                {% if page > 3 %}
                    <span>...</span>
                {% endif %}
            {% endif %}

            {% if page-1 > 0 %}
                <a href="{{ url_for('pagination.index', page=page-1) }}">{{ page-1 }}</a>
            {% endif %}

            <a href="{{ url_for('pagination.index', page=page) }}" class="active">{{ page }}</a>

            {% if page+1 <= total_pages %}
                <a href="{{ url_for('pagination.index', page=page+1) }}">{{ page+1 }}</a>
            {% endif %}

            {% if total_pages-page > 2 %}
                {% if page+2 < total_pages %}
                    <span>...</span>
                {% endif %}
                <a href="{{ url_for('pagination.index', page=total_pages) }}">{{ total_pages }}</a>
            {% endif %}

            {% if page < total_pages %}
                <a href="{{ url_for('pagination.index', page=page+1) }}">下一页</a>
            {% endif %}
        </div>
    {% endif %}
{% endblock %}

在这个模板页面中,我们首先循环遍历文章列表,将每篇文章的标题和内容渲染到页面上。接着,我们判断总文章数是否大于每页显示的文章数量,如果是,则显示分页控件。在分页控件中,我们通过跳转不同的url,实现页面跳转,并计算出当前页面对应的页码。其中,上一页、下一页、第一页和最后一页的跳转url,分别对应pagination.index的不同参数。而中间的页码,通过计算上一页和下一页的页码,以及当前页码,来计算得出。

示例演示

以下是两条示例说明,欢迎查看。

示例1

如果我们想要在我们的flask应用中使用分页效果,可以按照以下步骤操作:

  1. 安装flask_sqlalchemy包,并创建一个用于存储数据的sqlite数据库文件。
  2. 创建一个名为Article的model,描述我们要分页查询的数据。
  3. 创建一个视图函数,处理分页请求,并返回相应的数据。
  4. 创建一个模板页面,将获取到的文章列表渲染到页面上,显示分页控件。

通过以上步骤,我们就可以实现分页效果了。

示例2

以下是一个完整的代码演示:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)

@app.route('/')
@app.route('/<int:page>')
def index(page=1):
    PER_PAGE = 10
    articles = Article.query.order_by(Article.id.desc()).paginate(page, PER_PAGE)
    return render_template('index.html', articles=articles)

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

在这个示例中,我们创建了一个名为Article的Model,并在视图函数中调用paginate()方法来获取相关文章,并将结果渲染到页面上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python利用flask sqlalchemy实现分页效果 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • pyecharts结合flask框架的使用

    Pyecharts是一款基于Echarts的Python可视化库,可以快速地生成丰富、交互性强的数据可视化图表。Flask是一款使用Python编写的轻量级Web框架,可实现快速构建Web应用程序。结合Pyecharts和Flask,可以非常方便地搭建可视化Web应用程序,使得数据可视化和Web开发更加紧密地结合在一起。 下面介绍一下如何使用Pyechart…

    Flask 2023年5月15日
    00
  • python中Flask框架简单入门实例

    Flask框架是一种轻型的Web框架,使用Python编写。它的设计理念是简单、灵活、易于扩展和学习。本文将为您提供 Flask 框架的入门实例攻略。 环境搭建 首先,您需要在本地安装Python 3.x。推荐使用Anaconda作为python环境。接着安装Flask框架,您可以直接通过pip安装。 pip install Flask 示例一:Flask框…

    Flask 2023年5月15日
    00
  • flask框架实现修改密码和免密登录功能

    下面是详细讲解“flask框架实现修改密码和免密登录功能”的完整攻略。 一、修改密码功能 1. 创建修改密码的路由 在 Flask 的路由文件中,我们首先要创建一个修改密码的路由。例如: from flask import Blueprint user_bp = Blueprint(‘user’, __name__) @user_bp.route(‘/cha…

    Flask 2023年5月16日
    00
  • 一文了解Flask框架

    Flask是一款基于Python语言的轻量级Web框架,它的设计目标是简单易用、高效灵活。其核心实现只有约3000行代码,但却支持RESTful请求、Jinja2模板引擎、Werkzeug工具箱等众多功能,适合用于构建小型Web应用、快速原型开发等领域。 Flask框架的核心思想是WSGI(Web Server Gateway Interface),即Web…

    2023年3月13日
    00
  • flask上传作品之dbm操作的实现

    下面我将详细讲解“flask上传作品之dbm操作的实现”的完整攻略。 1. 确定需求与工具 在开始编码之前,我们需要明确需求并选好所需要的工具。 需求:实现通过flask上传作品并将相关信息储存在dbm数据库中。 工具:flask、dbm 2. 导入所需模块 在编写代码之前,我们需要先导入所需的模块。下面是一个简单的导入步骤,需要额外安装flask和dbm包…

    Flask 2023年5月16日
    00
  • flask结合jinja2使用详解

    Flask和Jinja2是一对经典的组合,Jinja2是Python中一种基于模板的语言,而Flask则是一个轻量级的web框架。 安装 首先,我们需要安装两个模块,Flask和Jinja2。可以通过pip来进行安装: pip install Flask pip install Jinja2 创建Flask应用 首先,在项目根目录下创建一个app.py文件,…

    Flask 2023年5月15日
    00
  • python+flask实现API的方法

    一、Python+Flask实现API的方法 Flask是一个轻量级的Web框架,使用Python编写。通过Flask,我们可以快速地构建一个API服务。实现API一般分为以下几个步骤: 定义路由 定义API请求的方法 定义API的返回数据格式 启动Flask应用 二、示例1 下面通过一个简单的示例来演示如何使用Python+Flask实现API。 定义路由…

    Flask 2023年5月15日
    00
  • Flask蓝图学习教程

    “Flask蓝图学习教程”完整攻略应该包括以下几个步骤: 步骤一:创建Flask应用 首先,需要在Python环境中安装Flask库。在安装好Flask后,可以通过下列代码来创建一个基本的Flask应用: from flask import Flask app = Flask(__name__) @app.route(‘/hello’) def hello_…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部