Menu
CoddyTech

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.

challenge icon

Défi

Moyen

Donnez à chaque auteur une page à l’adresse /authors/<id>/ nommée author_detail.

  1. Dans books/views.py, écrivez author_detail(request, pk) pour afficher books/author_detail.html : le nom dans un <h1>, un lien vers chaque livre et une erreur 404 pour un identifiant inconnu. Ajoutez sa route.
  2. Dans author_list.html, faites pointer le nom de chaque <h2> vers la page de l’auteur correspondant.
  3. 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})
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Django