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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

1314閲覧

【Django】paginationが動作しない。

hiyokorunner

総合スコア18

Django

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

Python 3.x

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

1グッド

0クリップ

投稿2019/07/05 10:28

トップ画面

pagination機能を実装しています。
上の画面の「次へ」ボタンを押すと、

http://127.0.0.1/diary/?page=2

となるはずが、

http://127.0.0.1/diary/?page%20=%202

となってしまいます。
何が原因でしょうか?

↓<day_list.html>

python

1{% extends 'diary/base.html' %} 2 3{% block content %} 4<h1>日記一覧</h1> 5<table class = 'table'> 6 <thead> 7 <tr> 8 <th>タイトル</th> 9 <th>日付</th> 10 <th>#</th> 11 <th>#</th> 12 </tr> 13 </thead> 14 15 <tbody> 16 {% for day in day_list %} 17 <tr> 18 <td><a href = "{% url 'diary:detail' day.pk %}">{{ day.title }}</a></td> 19 <td>{{ day.date }}</td> 20 <td><a href = "{% url 'diary:update' day.pk %}">更新</a></td> 21 <td><a href = "{% url 'diary:delete' day.pk %}">削除</a></td> 22 </tr> 23 {% endfor %} 24 </tbody> 25</table> 26 27<!-- 前へ の部分 --> 28{% if page_obj.has_previous %} 29 <a href = "?page = {{ page_obj.previous_page_number }}">前へ</a> 30{% endif %} 31 32<!-- 次へ の部分 --> 33{% if page_obj.has_next %} 34 <a href = "?page = {{ page_obj.next_page_number }}">次へ</a> 35{% endif %} 36 37{% endblock %}

↓<urs.py>

python

1from django.urls import path 2from . import views 3 4app_name = 'diary' 5 6urlpatterns = [ 7 path('', views.IndexView.as_view(), name = 'index'), # /diary 8 path('add/', views.AddView.as_view(), name = 'add'), # /diary/add 9 path('update/<int:pk>/', views.UpdateView.as_view(), name = 'update'), # diary/update/1 10 path('delete/<int:pk>/', views.DeleteView.as_view(), name = 'delete'), # diary/delete/1 11 path('detail/<int:pk>/', views.DetailView.as_view(), name = 'detail') # diary/detail/1 12] 13

↓<base.html>

python

1<!doctype html> 2<html lang="ja"> 3 <head> 4 <!-- Required meta tags --> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7 8 <!-- Bootstrap CSS --> 9 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> 10 11 <title>日記アプリケーション</title> 12 13 {% block extracss %}{% endblock %} 14 </head> 15 <body> 16 <div class = 'container'> 17 <nav class = 'nav'> 18 <a class = 'nav-link' href = "{% url 'diary:index' %}">一覧</a> 19 {% if user.is_superuser %} 20 <a class = 'nav-link' href = "{% url 'diary:add' %}" target = '_blank'>追加</a> 21 {% endif %} 22 </nav> 23 {% block content %} 24 {% endblock %} 25 </div> 26 27 28 <!-- Optional JavaScript --> 29 <!-- jQuery first, then Popper.js, then Bootstrap JS --> 30 <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> 31 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> 32 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> 33 {% block extrajs %}{% endblock %} 34 </body> 35</html>
aasshunyaaa👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

?page の後の = の前後にある余計なスペースを削除すると %20 はなくなると思います。

html

1<!-- 前へ の部分 --> 2{% if page_obj.has_previous %} 3 <a href = "?page={{ page_obj.previous_page_number }}">前へ</a> 4{% endif %} 5 6<!-- 次へ の部分 --> 7{% if page_obj.has_next %} 8 <a href = "?page={{ page_obj.next_page_number }}">次へ</a> 9{% endif %}

投稿2019/07/05 12:51

syuus

総合スコア403

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

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

hiyokorunner

2019/07/07 11:03

仰る通りにスペースを削除したら上手く行きました。 ありがとうございます! 宜しければ内部の動作(%20になった理由)についてご説明頂けませんでしょうか?
syuus

2019/07/07 13:02

Django とは関係なく、 URI に含まれるスペースはパーセントエンコーディングにより %20 になります。 簡単に言うと、パーセントエンコーディングは URI で使用できない文字を使える文字で置き換えて表記することです。
hiyokorunner

2019/07/15 04:02

すみません、コメントに気付かず返信が遅れてしまいました。 ご返信ありがとうこざいます。 そうなんですね、納得しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問