Menu
CoddyTech

Una página de autor

Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 23 de 23.

La última pieza: cada autor tiene su propia página, enlazada desde todos los lugares donde aparece el nombre de un autor. Es la página del libro que creaste en esta sección, pero para otro modelo.

Piensa en las tres formas de llegar. Un visitante en /authors/ hace clic en un nombre. Un visitante en la página de un libro hace clic en «de Frank Herbert». Y alguien escribe la dirección de un autor que no existe, y debería obtener un 404, no provocar un fallo.

Crea todos los enlaces con {% url %} y el id del autor, para que los enlaces sigan urls.py si alguna vez cambia.

challenge icon

Desafío

Intermedio

Dale a cada autor una página en /authors/<id>/ llamada author_detail.

  1. En books/views.py, escribe author_detail(request, pk) para renderizar books/author_detail.html: el nombre en un <h1>, un enlace a cada libro y un error 404 para un id desconocido. Añade su ruta.
  2. En author_list.html, enlaza cada nombre en <h2> a la página de su autor.
  3. En book_detail.html, enlaza solo el nombre del autor: by <a href="/authors/1/">Frank Herbert</a>.

En /authors/, haz clic en Frank Herbert: su página enlaza a Children of Dune y Dune.

Pruébalo tú mismo

from django.shortcuts import get_object_or_404, render

from .models import Author, Book


def home(request):
    books = Book.objects.select_related("author")
    return render(request, "books/home.html", {"books": books})


def book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk)
    return render(request, "books/book_detail.html", {"book": book})


def search(request):
    q = request.GET.get("q", "")
    books = Book.objects.filter(title__icontains=q).select_related("author")
    return render(request, "books/search.html", {"q": q, "books": books})


def author_list(request):
    authors = Author.objects.prefetch_related("books")
    return render(request, "books/author_list.html", {"authors": authors})
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Modelos y el panel de administración

Practica por tu cuenta: Playground de Django