Una página para cada libro
Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 14 de 23.
Cada libro necesita una página en su propia dirección: /books/1/, /books/2/. Un convertidor de rutas, de Django Basics, captura ese número y se lo pasa a la vista. Una página de los libros de un año:
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})Una página para una fila la identifica por su clave principal, pk: su id. get() genera una excepción si no se encuentra la fila, y una excepción en una vista provoca un fallo: 500 Error del servidor. get_object_or_404() de django.shortcuts responde con 404 Página no encontrada. Recibe el modelo y, después, las condiciones: get_object_or_404(Book, title="Emma").
Para crear un enlace a una ruta que captura un valor, pon el valor después del nombre: {% url 'books:books_of_year' book.year %}.
Desafío
IntermedioAsigna una página a cada libro. La plantilla books/book_detail.html está lista y espera book.
- Una vista
book_detail(request, pk). Un id sin libro devuelve 404. - Una ruta para
/books/<id>/llamadabook_detail, que solo coincide con números. - En la página de inicio, cada título enlaza a su página.
Presiona Run, haz clic en un título y después abre /books/999/.
Pruébalo tú mismo
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 las lecciones de Modelos y el panel de administración
3Páginas desde la base de datos
Una lista desde la base de datosUna página para cada libroPractica por tu cuenta: Playground de Django