flask sqlite 分页

2023-05-04  本文已影响0人  追梦人在路上不断追寻

在 Flask 中使用 SQLite 实现分页也是十分简单的,可以通过 Flask-SQLAlchemy 扩展来实现。以下是一个简单的 Flask-SQLAlchemy 分页示例:

首先,安装 Flask 和 Flask-SQLAlchemy:

pip install Flask Flask-SQLAlchemy

然后,在 Flask 应用程序中创建一个 SQLAlchemy 实例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

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

接下来,定义一个数据模型,这里以一个简单的用户模型为例:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

然后,定义一个视图函数来处理分页请求:

from flask import render_template, request

@app.route('/users')
def users():
    page = request.args.get('page', 1, type=int)
    per_page = request.args.get('per_page', 10, type=int)
    users = User.query.paginate(page=page, per_page=per_page)
    return render_template('users.html', users=users)

这个视图函数接受两个参数:page 和 per_page。page 表示当前页码,per_page 表示每页显示的记录数。默认情况下,page 和 per_page 分别为 1 和 10。

最后,创建一个模板 users.html 来显示分页数据:

{% extends "base.html" %}

{% block content %}
  <table>
    <tr>
      <th>ID</th>
      <th>Username</th>
      <th>Email</th>
    </tr>
    {% for user in users.items %}
      <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.username }}</td>
        <td>{{ user.email }}</td>
      </tr>
    {% endfor %}
  </table>

  {% if users.has_prev %}
    <a href="{{ url_for('users', page=users.prev_num, per_page=users.per_page) }}">Prev</a>
  {% endif %}

  {% if users.has_next %}
    <a href="{{ url_for('users', page=users.next_num, per_page=users.per_page) }}">Next</a>
  {% endif %}
{% endblock %}

这个模板使用了 Jinja2 模板引擎,通过 users.items 来遍历分页数据,使用 users.has_prev 和 users.has_next 来判断是否有上一页和下一页的链接。

总的来说,Flask-SQLAlchemy 提供了非常方便的分页功能,可以轻松地实现分页功能。

上一篇下一篇

猜你喜欢

热点阅读