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.
Desafío
IntermedioDale a cada autor una página en /authors/<id>/ llamada author_detail.
- En
books/views.py, escribeauthor_detail(request, pk)para renderizarbooks/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. - En
author_list.html, enlaza cada nombre en<h2>a la página de su autor. - 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})
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
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