Python利用flask sqlalchemy实现分页效果

yizhihongxing

下面为你详细讲解如何利用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日

相关文章

  • 如何使用 Flask 做一个评论系统

    下面我来详细讲解使用 Flask 做一个评论系统的完整攻略。 准备工作 使用 Flask 做一个评论系统需要以下准备工作: 安装 Python 和 Flask 安装 ORM 框架 SQLAlchemy 安装数据库 MySQL 为了方便操作,我们可以使用 Anaconda 环境,这个环境包含了 Python、Flask 和 SQLAlchemy,我们只需要安装…

    Flask 2023年5月15日
    00
  • vue+flask实现视频合成功能(拖拽上传)

    下面是详细讲解“vue+flask实现视频合成功能(拖拽上传)”的完整攻略。 总体思路 这个项目的目的是实现用户可以通过拖拽上传多个视频文件,并将这些视频文件拼接成一个新的视频文件自定义保存,同时该视频文件可以在前端进行预览播放。 具体的实现方案是:前端使用vue框架构建视图,并使用dropzone.js插件实现文件的拖拽上传;后端使用flask框架运行py…

    Flask 2023年5月16日
    00
  • Elasticsearches之python使用及Django与Flask集成示例

    下面我将为您详细讲解“Elasticsearches之python使用及Django与Flask集成示例”的完整攻略,这个攻略主要包含两个示例说明:使用python操作Elasticsearch以及如何将Elasticsearch集成到Django和Flask中。 Elasticsearches之Python使用 安装elasticsearch-py 首先,…

    Flask 2023年5月16日
    00
  • Flask中endpoint的理解(小结)

    Flask中的endpoint是指一个可重用的处理程序,以及与之关联的URL规则。Flask应用程序中的每个视图函数都可以被赋予一个endpoint,这个endpoint可以通过url_for()函数在应用程序中的任何地方进行访问。在下面的文本中,我们将详细讲解Flask中endpoint的理解,包括其作用以及使用方法。 作用 Flask的endpoint主…

    Flask 2023年5月15日
    00
  • 在Python的Flask框架中使用模版的入门教程

    在Python的Flask框架中使用模板是非常常见的操作,因为它能够帮助我们更快地开发网站,同时也能够方便我们管理网站的视图和数据。下面是在Python的Flask框架中使用模板的入门教程及两条示例说明。 1. 安装Flask框架 首先,我们需要在本地环境中安装Flask框架。可以通过以下命令来安装: pip install flask 2. 创建Flask…

    Flask 2023年5月15日
    00
  • 5分钟 Pipenv 上手指南

    5分钟 Pipenv 上手指南 介绍 Pipenv 是一个严谨的 Python 项目环境管理工具。它将 Pipfile,Pipfile.lock 和 virtualenv 组合在一起,使得创建和管理项目环境更加方便。 Pipenv 不仅仅能自动跟踪项目依赖项和环境,还能让你的依赖项更安全、更易于管理。 这是一个 5 分钟上手 Pipenv 的指南。 安装 P…

    Flask 2023年5月15日
    00
  • Flask-蓝图 blueprint详情

    Flask-蓝图(blueprint)是Flask框架的一个重要概念,常用于将一个大型应用切割成多个模块,分别进行开发和维护,提高了代码的可维护性和可读性。在本文中,我们将详细讲解Flask-蓝图的各种细节,并介绍两个简单的示例说明。 什么是Flask-蓝图(blueprint) Flask-蓝图(blueprint)是Flask框架中一个可重用的程序组件。…

    Flask 2023年5月16日
    00
  • 开源Web应用框架Django图文教程

    关于“开源Web应用框架Django图文教程”的完整攻略,我可以提供以下内容: 介绍 Django是一个使用Python语言开发的开源Web应用框架,它可以快速地开发高质量的web应用,并且具有强大的后台管理系统,受到了广泛的用户和开发者的喜爱。本教程旨在为初学者介绍Django的使用方法和开发技巧。 准备 在开始学习Django前,你需要先安装Python…

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