Menu
CoddyTech

각 책을 위한 페이지

Coddy Django 여정의 모델과 관리자 섹션에 포함된 레슨. 23개 중 14번째.

각 책에는 고유한 주소의 페이지가 필요합니다: /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})

한 행을 표시하는 페이지에서는 기본 키인 pk, 즉 id로 해당 행을 지정합니다. 행이 없을 때 get()은 예외를 발생시키며, 뷰에서 예외가 발생하면 충돌하여 500 서버 오류가 표시됩니다. django.shortcuts의 get_object_or_404()를 사용하면 대신 404 페이지를 찾을 수 없음 응답을 반환합니다. 이 함수에는 먼저 모델을 지정한 다음 조건을 지정합니다: get_object_or_404(Book, title="Emma").

값을 캡처하는 경로에 연결하려면 이름 뒤에 값을 넣습니다: {% url 'books:books_of_year' book.year %}.

challenge icon

챌린지

중급

모든 책에 페이지를 만들어 보세요. 템플릿 books/book_detail.html은 준비되어 있으며 book을 기대합니다.

  1. books/views.py에서 book_detail(request, pk)를 작성하세요. 해당 id의 책을 표시하고, 없으면 404로 응답합니다.
  2. books/urls.py에서 숫자만 허용하는 /books/<id>/ 경로를 book_detail로 연결하세요.
  3. home.html에서 각 제목을 해당 책의 페이지로 연결하세요. 제목만 링크여야 합니다: <a ...>Dune</a> (1965).

홈 페이지에서 Dune을 클릭한 다음 /books/999/을 여세요: 페이지를 찾을 수 없음(404).

직접 해보기

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 플레이그라운드