Menu
CoddyTech

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, apresentado em 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 identifica-a pela chave primária, pk: seu id. get() gera uma exceção quando não encontra uma linha, 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 em vez disso. 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 %}.

challenge icon

Desafio

Médio

Dê uma página a cada livro. O template books/book_detail.html está pronto e espera book.

  1. Em books/views.py, escreva book_detail(request, pk): ele exibe o livro com esse id ou responde com 404.
  2. Em books/urls.py, encaminhe /books/<id>/, somente números, para ele como book_detail.
  3. Em home.html, crie um link em cada título para sua página. Somente o título é o link: <a ...>Dune</a> (1965).

Clique em Dune na página inicial e depois abra /books/999/: Página não encontrada (404).

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