Menu
CoddyTech

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 con 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 encuentra una fila, y una excepción en una vista provoca un fallo, 500 Server Error. get_object_or_404() de django.shortcuts responde con 404 Page not found en su lugar. Recibe el modelo y, después, las condiciones: get_object_or_404(Book, title="Emma").

Para enlazar a una ruta que captura un valor, coloca el valor después del nombre: {% url 'books:books_of_year' book.year %}.

challenge icon

Desafío

Intermedio

Asigna una página a cada libro. La plantilla books/book_detail.html está lista y espera book.

  1. En books/views.py, escribe book_detail(request, pk): muestra el libro con ese id o responde con 404.
  2. En books/urls.py, dirige /books/<id>/, solo números, a ella como book_detail.
  3. En home.html, enlaza cada título con su página. Solo el título es el enlace: <a ...>Dune</a> (1965).

Haz clic en Dune en la página de inicio y después abre /books/999/: página no encontrada (404).

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

Practica por tu cuenta: Playground de Django