Uma página para cada livro
Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 14 de 23.
Cada livro precisa de uma página em seu próprio endereço: /books/1/, /books/2/. Um conversor de caminho, do Django Basics, captura esse número e o passa para a view. Uma página com os livros de um ano:
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})Uma página para uma linha a identifica por sua chave primária, pk: seu id. get() em uma linha inexistente gera uma exceção, e uma exceção em uma view causa uma falha, Erro 500 do servidor. get_object_or_404(), de django.shortcuts, responde com 404 Página não encontrada. Ele recebe o modelo e, em seguida, as condições: get_object_or_404(Book, title="Emma").
Para criar um link para uma rota que captura um valor, coloque o valor depois do nome: {% url 'books:books_of_year' book.year %}.
Desafio
MédioDê uma página a cada livro. O modelo books/book_detail.html está pronto e espera book.
- Uma visualização
book_detail(request, pk). Um ID sem livro retorna 404. - Uma rota para
/books/<id>/chamadabook_detail, que corresponde apenas a números. - Na página inicial, cada título tem um link para sua página.
Pressione Run, clique em um título e, em seguida, abra /books/999/.
Experimente você mesmo
from django.shortcuts import render
from .models import Book
def home(request):
books = Book.objects.all()
return render(request, "books/home.html", {"books": books})
Todas as lições de Models e o Admin
Pratique por conta própria: Playground de Django