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, para otro modelo.

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

Crea cada enlace 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:

  • El nombre del autor en un <h1> y enlaces a sus libros.
  • Un id sin autor devuelve 404.
  • En /authors/, el nombre de cada autor en su <h2> enlaza a la página.
  • En la página de un libro, el nombre del autor enlaza a ella.

Presiona Run y haz clic en un nombre en /authors/.

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