Une page d’auteur
Fait partie de la section Modèles et interface d’administration du Journey Django de Coddy. Leçon 23 sur 23.
Dernière pièce du puzzle : chaque auteur a sa propre page, accessible depuis chaque endroit où apparaît le nom d’un auteur. C’est la page du livre que tu as créée dans cette section, pour un autre modèle.
Pense aux trois façons d’y accéder. Un visiteur sur /authors/ clique sur un nom. Un visiteur sur la page d’un livre clique sur « par Frank Herbert ». Et quelqu’un saisit l’adresse d’un auteur qui n’existe pas : il devrait obtenir une erreur 404, et non provoquer un plantage.
Crée chaque lien avec {% url %} et l’identifiant de l’auteur, afin que les liens suivent urls.py si jamais il change.
Défi
MoyenDonnez à chaque auteur une page à l’adresse /authors/<id>/ nommée author_detail.
- Dans
books/views.py, écrivezauthor_detail(request, pk)pour afficherbooks/author_detail.html: le nom dans un<h1>, un lien vers chaque livre et une erreur 404 pour un identifiant inconnu. Ajoutez sa route. - Dans
author_list.html, faites pointer le nom de chaque<h2>vers la page de l’auteur correspondant. - Dans
book_detail.html, créez un lien uniquement sur le nom de l’auteur :by <a href="/authors/1/">Frank Herbert</a>.
Sur /authors/, cliquez sur Frank Herbert : sa page contient des liens vers Children of Dune et Dune.
Essayez vous-même
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})
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Modèles et interface d’administration
3Des pages issues de la base de données
Une liste issue de la base de donnéesUne page pour chaque livreEntraînez-vous par vous-même : Playground Django