Djangoで始めるブログ作成講座⑥:月別投稿一覧ページを作ろう!

「Djangoで始めるブログ作成講座」の第六回です。
前回はDjangoで作成したブログにカテゴリー機能を追加しました。

関連記事

「Djangoで始めるブログ作成講座」の第五回です。 前回はDjangoでページング機能を実装しました。 [sitecard subtitle=関連記事 url=https://freemas.stepupkaraoke.com/p[…]

今回もブログによくある機能として月別投稿一覧ページを作成していきます。
2023年6月、のようにサイドバーに並んでいるリンク先から飛べるページですね。

この記事を読んで取り組むことで、Djangoの以下の基本的な使い方を習得することができます。

  • Djangoでの年月URLの作成方法
  • クラスベースビューの継承の仕方

月別投稿一覧ページはModelの改修が必要なく、容易に作れるページとなっています。
これまでのおさらいも兼ねながら、さっくり作成していきましょう。

Djangoで始めるブログ作成講座⑥:月別記事ページを作ろう!

urls.pyに月別投稿一覧ページのルーティングを記述

urls.py
新たにルーティングを追加しました。URLは「/archive/2023/5」のように分かりやすく設定しています。
次に、ここから呼び出されるPostListByMonthViewを作成しましょう。

月別投稿一覧ページ表示用のViewを作成する

views.pyの末尾に付け加えてください。

views.py
PostListViewを継承して作成

前回のカテゴリー記事と同様に、月別記事一覧も全記事一覧とほとんど変わらないページです。
それゆえに、同じようにPostListViewを継承して作成しています。

このように、Djangoでは一つのクラスを複数のクラスで継承することも可能となっています。

取得した年月で投稿を絞り込み

基本ベースは投稿一覧のPostListViewなので、そこからの差分を記載していきます。
先ほどurls.pyでこのViewに年と月を渡したので、それを取得して投稿を絞り込んでいます。

取得した年月をそのままコンテキストに登録

ページには年月を表示したいので、URLで指定した年月をそのまま受け取ってページに渡しています。

Viewの準備ができたので、最後に月別ページのTemplateを作成しましょう。

月別投稿一覧ページのTemplateを作成する

新たにpost_by_month.htmlというファイルを作成して、以下のように記載します。

post_by_month.html
もうお気づきかもしれませんが、カテゴリー別一覧ページとほとんど同じで、違う部分はH1要素の中身のみとなります。

開発環境を立ち上げて、月別投稿一覧ページにアクセスする

さて、実装は完了したので開発環境を立ち上げて確認してみましょう。
ブラウザのURL欄に、以下を打ち込んでみてください。

http://127.0.0.1:8000/djangoblog/archive/[年]/[月]/

年と月は投稿がある年と月を指定してくださいね。
例えば「http://127.0.0.1:8000/djangoblog/archive/2023/5/」といった形です。

ちゃんとその年月の投稿のみが表示されるはずです。

おわりに

今回の記事を実践してみて、カテゴリー一覧や投稿一覧とTemplateは混ぜられるのでは?と感じた人も居るかもしれません。
ViewとTemplateの繋がりが1対1でなくなるために理解しにくくはなるものの、そういったことも可能です。

何か修正が入った場合のメンテナンスも1ページで済むので、興味がある場合は実践してみるのも手です。
(3ページくらいならば気になりませんが、50ページ越えてくると大変ですからね)

さて、今回もこの回のソースをGithubに掲載しておくので、もしも見返したい場合は確認してみてください。

Githubリンク(BLOGー月別投稿一覧ページ追加)

次の記事では、ブログにサイドバーを作成して全ページで表示させていきましょう!

関連記事

「Djangoで始めるブログ作成講座」の第七回です。 前回はDjangoで作成したブログに月別投稿一覧ページを追加しました。 [sitecard subtitle=関連記事 url=https://freemas.stepupkar[…]