각 책을 위한 페이지
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 %}.
챌린지
중급모든 책에 페이지를 만들어 주세요. 템플릿 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 플레이그라운드