カテゴリ: Flask 更新日: 2025/12/21

Flaskでソートとページネーションを完全ガイド!初心者でもできる並び替えとページ分け

Flaskでソート・ページネーションを実装する基本テクニック
Flaskでソート・ページネーションを実装する基本テクニック

先生と生徒の会話形式で理解しよう

生徒

「Flaskで作ったブログで、投稿を日付の新しい順に並べたり、ページごとに分けたりできますか?」

先生

「はい、それは『ソート(並び替え)』と『ページネーション(ページ分け)』という技術を使うことで実現できます。」

生徒

「なんだか難しそうですが、プログラミング初心者でもできますか?」

先生

「もちろんです!わかりやすく説明しますので、一緒に見ていきましょう。」

1. Flaskとは?なにができるの?

1. Flaskとは?なにができるの?
1. Flaskとは?なにができるの?

Flask(フラスク)は、Pythonというプログラミング言語で作られた、軽量なウェブアプリケーションの開発ツールです。ブログや掲示板、日記アプリなどを作るときに使われます。HTMLというウェブページの仕組みと組み合わせることで、誰でも簡単にウェブサイトを作ることができます。

2. ソート(並び替え)とは?

2. ソート(並び替え)とは?
2. ソート(並び替え)とは?

ソートとは、データの順番を整えることです。たとえば、ブログの記事を「新しい順」や「古い順」に並べたり、タイトルのあいうえお順にしたりできます。

パソコンの中にある「日付順」や「名前順」で並べ替える機能と同じです。Flaskでもそれをプログラムでできます。

3. ページネーション(ページ分け)とは?

3. ページネーション(ページ分け)とは?
3. ページネーション(ページ分け)とは?

ページネーションとは、たくさんの情報を「1ページに全部表示せず、分けて表示すること」です。

たとえば、100件のブログ記事があると、1ページに10件ずつ表示して「次へ」や「前へ」のボタンで移動できるようにします。インターネットでよく見るページ切り替え機能です。

4. サンプル:投稿を日付でソートして表示

4. サンプル:投稿を日付でソートして表示
4. サンプル:投稿を日付でソートして表示

まずは、記事を日付の「新しい順」に並べて表示する方法を見てみましょう。


from flask import Flask, render_template
from datetime import datetime

app = Flask(__name__)

posts = [
    {"title": "記事1", "date": datetime(2024, 7, 10)},
    {"title": "記事2", "date": datetime(2025, 1, 5)},
    {"title": "記事3", "date": datetime(2023, 12, 15)}
]

@app.route("/")
def index():
    sorted_posts = sorted(posts, key=lambda x: x["date"], reverse=True)
    return render_template("index.html", posts=sorted_posts)

sorted()という関数を使って、記事の「日付(date)」を基準に新しい順(reverse=True)で並べ替えています。

5. サンプル:ページネーション(ページ分け)の実装

5. サンプル:ページネーション(ページ分け)の実装
5. サンプル:ページネーション(ページ分け)の実装

次に、ブログ記事を「1ページに2件ずつ」表示するようにしてみましょう。


from flask import request

@app.route("/page")
def page():
    page = request.args.get("page", default=1, type=int)
    per_page = 2
    start = (page - 1) * per_page
    end = start + per_page
    paginated = posts[start:end]
    return render_template("page.html", posts=paginated, page=page)

request.args.get()を使って、URLの「?page=2」のような番号を受け取ります。たとえば「page=3」なら3ページ目です。

startendを計算して、必要な記事だけ取り出して表示します。

6. HTML側のページネーション表示

6. HTML側のページネーション表示
6. HTML側のページネーション表示

画面に「前へ」「次へ」のボタンをつけるには、HTML側でこうします。


<h2>記事一覧({{ page }}ページ目)</h2>
<ul>
    {% for post in posts %}
        <li>{{ post.title }} - {{ post.date.strftime('%Y-%m-%d') }}</li>
    {% endfor %}
</ul>
<a href="/page?page={{ page - 1 }}">前へ</a> | <a href="/page?page={{ page + 1 }}">次へ</a>

これはテンプレートエンジン(Flaskで使うHTMLに似た構文)で、{{ }}で変数を表示し、{% %}で繰り返し処理をしています。

7. URLに合わせてページを切り替える方法

7. URLに合わせてページを切り替える方法
7. URLに合わせてページを切り替える方法

ページを切り替えるには、URLに「?page=2」のように数字を入れます。

たとえば:


http://localhost:5000/page?page=1
http://localhost:5000/page?page=2

このURLの数字に応じて、表示される記事が切り替わるしくみです。

8. こんな時どうする?初心者がつまずきやすいポイント

8. こんな時どうする?初心者がつまずきやすいポイント
8. こんな時どうする?初心者がつまずきやすいポイント
  • ページの番号が「マイナス」や「0」だとエラーになることがあるので注意しましょう。
  • ソートはPythonのsorted()で簡単にできますが、辞書形式のデータではキー名に注意が必要です。
  • ページネーションは、表示件数と計算方法(startとendの計算)を間違えると同じ記事が重複したり、抜けたりします。

9. ソートやページネーションはなぜ必要?

9. ソートやページネーションはなぜ必要?
9. ソートやページネーションはなぜ必要?

もしブログに1000件の記事があって、それをすべて1ページに表示してしまったら、画面がとても重くなってしまいます。読み込みも遅くなってしまい、見る人にとっても使いづらくなります。

そこで、表示件数を絞ってページ分けすることで、スムーズに使えるようになります。また、新しい記事を上に表示することで、読者にとっても分かりやすくなります。

まとめ

まとめ
まとめ

Flaskでブログや一覧ページを作成するときに欠かせないのが、ソート(並び替え)とページネーション(ページ分け)の仕組みです。今回の記事では、投稿の並び順を自由に変更したり、たくさんの投稿を複数ページに分けて表示したりする方法を学びました。とくに、記事数が増えてくると「新しい投稿を上に表示したい」「10件ずつに区切って見やすくしたい」と感じることが多くなります。そんなときに活躍するのが今回取り上げたソートとページネーションであり、Flaskのシンプルな記述と組み合わせることで、初心者でも扱いやすい形で実装できます。 ソートではPythonのsorted関数を使い、辞書型データの特定のキーを基準に並べ替えることができました。またreverse=Trueを使うことで、投稿を新しい順に揃えることも簡単でした。これはブログだけでなく、日記、掲示板、買い物リストなど、あらゆるアプリで利用される基本的な手法です。一方、ページネーションは、request.args.getを使ってページ番号を取得し、「start = (page - 1) * per_page」という計算で必要な部分だけを切り取る仕組みを学びました。この考え方は、実際のWebアプリの多くで採用されている方法であり、データを効率的に扱ううえで非常に重要です。 以下に、今回の内容をもう一度整理して体験できるサンプルコードを記載しています。このコードを試していただくことで、ソートとページネーションがどのように組み合わされて動作しているかを具体的に確認できるでしょう。学んだ内容をそのまま自分のアプリに応用できる構成となっているため、ぜひ挑戦してみてください。

ソートとページ分けをまとめたサンプルコード


from flask import Flask, render_template, request
from datetime import datetime

app = Flask(__name__)

posts = [
    {"title": "にっき1", "date": datetime(2024, 7, 10)},
    {"title": "にっき2", "date": datetime(2025, 1, 5)},
    {"title": "にっき3", "date": datetime(2023, 12, 15)},
    {"title": "にっき4", "date": datetime(2024, 3, 8)},
    {"title": "にっき5", "date": datetime(2024, 10, 1)},
]

@app.route("/")
def top():
    sorted_posts = sorted(posts, key=lambda x: x["date"], reverse=True)
    page = request.args.get("page", default=1, type=int)
    per_page = 2
    start = (page - 1) * per_page
    end = start + per_page
    paginated = sorted_posts[start:end]
    return render_template("index.html", posts=paginated, page=page)

このサンプルにより、投稿はまず日付で並び替えられ、そのあと1ページあたり2件ずつに区切られて表示されます。実際にブラウザで「/?page=2」などとアクセスを変えることで、ページごとに違う投稿が表示され、ページネーションが正しく動作していることが分かります。また、ソートとページネーションは同時に活用されることが多く、たとえば「最新の記事5件を1ページ目に表示」「過去の記事は2ページ目以降へ」などの仕組みを自然に構築できます。 さらに応用として、タイトル順で並び替える、投稿者名でソートする、1ページの表示件数を切り替えるといった拡張も簡単に行えます。Flaskの柔軟な仕組みとPythonの自由度の高いデータ操作を組み合わせることで、初心者でも本格的な一覧ページを作りやすくなります。今回の内容を押さえておけば、ブログや掲示板アプリの基盤をしっかり作ることができ、ソートやページネーションの概念が自然と身につくでしょう。

先生と生徒の振り返り会話

生徒

「ソートとページネーションって、最初は難しそうに感じましたが、しくみが分かると意外とシンプルでした!」

先生

「投稿を並べる順番やページ分けの考え方はWebアプリではとてもよく使われるので、覚えておくと役立ちますよ。Flaskなら少ないコードで実現できるのも魅力ですね。」

生徒

「sortedで並び替えられることや、startとendの計算でページ分けできることがわかってよかったです。ブログ以外でも使ってみたいです!」

先生

「その意気です。応用すれば、検索結果のページ分けやランキング一覧の作成など、いろいろな場所で活用できますよ。」

生徒

「次はボタンやデザインも付けて、もっと本格的なブログページにしたいです!」

先生

「ぜひ挑戦してみてください。今回の基礎を押さえていれば、どんどん発展させられますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flaskとは何ですか?初心者にとってどんな特徴がありますか?

FlaskとはPythonで作られた軽量なWebアプリケーションフレームワークで、初心者でも簡単にブログや掲示板などのWebサービスを作れるのが特徴です。HTMLと組み合わせることで自由に画面も構成できます。
カテゴリの一覧へ
新着記事
New1
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
New2
Flask
FlaskでリダイレクトやURL生成を行う方法!便利な関数の使い方を解説
New3
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New4
Flask
Flask‑Mailの使い方!アプリからメールを送信する基本方法を解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策