djangoクエリ結果をページングする方法

白蛇くん
djangoチュートリアルでページネーションのコードを書き、動作確認もできたのですが、クエリ結果を反映した場合のページネーションができないで困っています。
ヒロヤン
ページングはdjangoのチュートリアルを見れば簡単に作成できるのですがクエリでパラメーターを設定してからのページネーションは少しばかり複雑でコードを追加で書く必要があります。
前提条件

・django2.2/python3.8

・models、formsの基礎知識がある

・getとpostの理解ができている

・djangoのテンプレートの理解ができている

クエリ後のページングの問題点

クエリでのパラメーターをそのまま引き継いでページングをしてくれれば良いのですが、そんな都合良くdjangoさんは動いてくれません。

今回はクエリでパラメーターを検索したあともきちんとパラメーターを引き継いで2ページ目へと画面遷移できるコードを書いてみます。

チュートリアルのページング

ページングに関してはdjangoチュートリアルに習ってコードを作成すればすんなりと動作はします。

djangoチュートリアルのページネーションに書かれたページへ飛ぶ

上記のチュートリアルを理解した上でコードを下記のように書きました。

formに対してバリデーションをかけていますが、こちらのコードでまずはページング処理がきちんと行われます。

views.py

このviewsに対応するformが下記。InquiryFindFormになります。

form.py

modelsのコードも念のため記述しておきます

model.py

所々、djangoのテンプレートがありますがhtmlはこんな感じです

クエリ後が引き継がれるようにviewsに設定

クエリを引き継がせるには、新たに_some_page_hrefという内部関数を作成します。明示的に内部関数は先頭にアンダーバーをつけます。

_some_page_href関数で返される戻り値( return ‘?’ + ‘&’.join(params) が、クエリで検索語の文字列をページングを実行しても引き継がれるようにしています。

views.py

htmlには以下のテンプレートを追記します。

スクールを利用して本格的に学ぶ

いかがでしたでしょうか?

今回10人中9人が挫折すると言われるプログラミングを、半年間もの間頑張れ、結果、今はPythonエンジニアとして働く事ができているのも、プログラミングスクールを利用して自ら目標を設定して講師の言う通りにひたすら打ち込んだまでです。

挫折率が高いプログラミングこそお金を払ってメンターを付けて、道を見失わないように環境を構築する必要があるのではないでしょうか。

結局一人だとどうしてもだらけてしまいます。

これはダイエットで自分一人では痩せられないけど、トレーナーを付けて否が応でもせざるを得ない環境を作ると一緒ですね。

ヒロヤンもプログラミング勉強開始直後はあれこれ悩みましたが、悩むよりも手っ取り早くテックキャンプDMM Web Campのスクールに登録した方が最短ルートで勉強できるのではないかと考えました。

テックキャンプで無料相談を受ける

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です