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 étape : chaque auteur a sa propre page, accessible depuis chaque endroit où son nom apparaît. C’est la page du livre que vous avez créée dans cette section, mais pour un autre modèle.
Pensez 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 doit obtenir une erreur 404, et non provoquer un plantage.
Créez chaque lien avec {% url %} et l’identifiant de l’auteur, afin que les liens suivent urls.py si ce fichier venait à changer.
Défi
MoyenDonnez à chaque auteur une page à l’adresse /authors/<id>/ nommée author_detail :
- Le nom de l’auteur dans un
<h1>, ainsi que des liens vers ses livres. - Un identifiant sans auteur renvoie une erreur 404.
- Sur
/authors/, le nom de chaque auteur dans son<h2>renvoie vers sa page. - Sur la page d’un livre, le nom de l’auteur renvoie vers sa page.
Cliquez sur Exécuter, puis sur un nom dans /authors/.
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