質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

667閲覧

Djangoでのページネーション用テンプレートを使いまわしたい

Ykkykk

総合スコア140

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/02/21 03:36

編集2019/02/21 05:24

Djangoでのページネーション用テンプレートを作成し、いろいろなテンプレート内で使いまわしたいです。

<ul class="pagination"> {% if obj.has_previous %} <li class="page-item"> <a class="page-link" href="{% url 'page1' %}">&laquo;first</a> </li> <li class="page-item"> <a class="page-link" href="{{obj.previous_page_number}}">&laquo;prev</a> </li> {% endif %} {% for num in obj.paginator.page_range %} {% if obj.number == num %} <li class="page-item active"><a class="page-link" href="#!">{{num}}</a> </li> {% else %} <li class="page-item"><a class="page-link" href="{% url 'page1' %}/{{num}}">{{num}}</a> </li> {% endif %} {% endfor %} {% if obj.has_next %} <li class="page-item"> <a class="page-link" href="{% url 'page1' %}/{{obj.next_page_number}}">next&raquo;</a> </li> <li class="page-item"><a class="page-link" href="{% url 'page1' %}/{{obj.paginator.num_pages}}">last&raquo;</a> </li> {% endif %} </ul>

以上のようなHTMLを作成しているのですが、上記のようなページ指定の仕方だとpage1以外では使うことができません。

urls.py

1urlpatterns = [ 2 path('page1', views.page1, name='page1'), 3 path('page1/<int:num>', views.page1, name='page1'), 4 path('page2', views.page2, name='page2'), 5 path('page2/<int:num>', views.page2, name='page2'), 6 ]

上記のように、URLの中でページ番号を指定している場合、ページネーション用のテンプレートを使いまわすことはできないでしょうか?
HTML内でのhref={% url 'page1' %}の部分をどう書くべきかがわからないです。
こちらのサイトを参考に、HTML内でページを指定している箇所を、href="?page={{ num }}"としてみたのですが、URLがhttp://localhost/page1/1?page=1のようになってしまいました。

上記のようなURLで指定したい場合は、それぞれのテンプレートに直接ページネーションの設定をするということでしょうか?
ご教示いただけますと幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/21 04:59

使いましたい → 使いまわしたい ですかね。
guest

回答1

0

ベストアンサー

ページネーションを使い回すことは可能です。以下はサンプルです。

pagination.html

{% if is_paginated %} <nav aria-label="navigation" class="mt-2"> <ul class="pagination"> {% if page_obj.has_previous %} <li class="page-item"> <a href="?page={{ page_obj.previous_page_number }}" class="page-link previous">&laquo;前</a> </li> {% else %} <li class="page-item disabled"> <span class="page-link previous">&laquo; 前</span> </li> {% endif %} {% for i in paginator.page_range %} {% if i == page_obj.number %} <li class="page-item active"> <span class="page-link">{{ i }}</span> </li> {% else %} <li class="page-item"> <a href="?page={{ i }}" class="page-link">{{ i }}</a> </li> {% endif %} {% endfor %} {% if page_obj.has_next %} <li class="page-item"> <a href="?page={{ page_obj.next_page_number }}" class="page-link next">次 &raquo;</a> </li> {% else %} <li class="page-item disabled"> <span class="page-link next">次 &raquo;</span> </li> {% endif %} </ul> </nav> {% endif %}

使う場合は↑のテンプレートを呼び出します。その時、page_objをテンプレートにわたすことで動作します。またListViewでpagenate_byの指定が必要です。

views.py

class ExampleView(ListView): paginate_by = 10 #1ページにいくつ表示させるか template_name = 'example.html'

example.html

{% include 'pagination.html' with page=page_obj %}

投稿2019/02/21 07:46

alpaka

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2019/02/21 08:03

詳細にご回答いただきありがとうございます。 一ページ前・次ではなく、四ページあるうちの四ページ目にいる際に一ページ目に戻るにはどうすればよいのでしょうか?
alpaka

2019/02/21 08:10

上のサンプルの場合ですと 前1,2,3,4次 みたいになっていてそれぞれの番号を押すと遷移するようになってます。なので4ページ目にいる場合でも1をクリックすれば1ページめにいきます
Ykkykk

2019/02/21 08:16

再度お教えいただきありがとうございます。 重ねて申し訳ないのですが、これはListViewを使用しないと適切に動かないということでしょうか?? どうしてもURLに?page=1などの文字が入ってしまって遷移できないです。。。
alpaka

2019/02/21 09:02

そうですね。ListViewを想定していました。
Ykkykk

2019/02/21 09:09

なるほどです。 urls.pyは関係ないという認識で問題ないでしょうか?
alpaka

2019/02/21 09:22

はい、urls.pyはページネーションではいじらないはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問