Menu
CoddyTech

本ごとのページ

CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 14/23。

各書籍には、/books/1/、/books/2/のように、それぞれ固有のアドレスにページが必要です。Django Basicsで学んだパスコンバーターがその数字を取得し、ビューに渡します。ある年の書籍一覧ページは次のとおりです。

path("years/<int:year>/", views.books_of_year, name="books_of_year"),

def books_of_year(request, year):
    books = Book.objects.filter(year=year)
    return render(request, "books/year.html", {"year": year, "books": books})

1行分のページでは、主キーであるpk、つまりidでその行を指定します。存在しない行に対してget()を呼び出すと例外が発生し、ビュー内の例外はクラッシュ、つまり500 Server Errorになります。django.shortcutsのget_object_or_404()を使うと、代わりに404 Page not foundを返します。モデルを指定し、その後に条件を指定します。例:get_object_or_404(Book, title="Emma")。

値を受け取るルートへのリンクを作成するには、名前の後に値を指定します。{% url 'books:books_of_year' book.year %}。

challenge icon

チャレンジ

中級

それぞれの本にページを用意しましょう。テンプレート books/book_detail.html は準備済みで、book を受け取る想定です。

  • ビュー book_detail(request, pk)。本が存在しない ID へのアクセスには 404 を返します。
  • /books/<id>/ 用のルートを book_detail という名前で作成し、数字のみに一致させます。
  • ホームページでは、各タイトルからその本のページへリンクします。

Run を押し、タイトルをクリックしてから、/books/999/ を開いてください。

自分で試してみよう

from django.shortcuts import render

from .models import Book


def home(request):
    books = Book.objects.all()
    return render(request, "books/home.html", {"books": books})

モデルと管理サイトのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド