Strona dla każdej książki
Część sekcji Modele i panel administracyjny ścieżki Django w Coddy. Lekcja 14 z 23.
Każda książka potrzebuje strony pod własnym adresem: /books/1/, /books/2/. Konwerter ścieżki z kursu Django Basics przechwytuje tę liczbę i przekazuje ją do widoku. Strona z książkami z jednego roku:
path("years/<int:year>/", views.books_of_year, name="books_of_year"),
def books_of_year(request, year):
books = Book.objects.filter(year=year)
return render(request, "books/year.html", {"year": year, "books": books})Strona pojedynczego rekordu identyfikuje go za pomocą klucza głównego, pk: jego id. Wywołanie get() dla nieistniejącego rekordu zgłasza wyjątek, a wyjątek w widoku powoduje awarię: Błąd serwera 500. get_object_or_404() z django.shortcuts zamiast tego zwraca odpowiedź 404 Nie znaleziono strony. Funkcja przyjmuje model, a następnie warunki: get_object_or_404(Book, title="Emma").
Aby utworzyć odnośnik do trasy, która przechwytuje wartość, umieść tę wartość po nazwie: {% url 'books:books_of_year' book.year %}.
Wyzwanie
ŚredniUtwórz stronę dla każdej książki. Szablon books/book_detail.html jest gotowy i oczekuje book.
- Widok
book_detail(request, pk). Identyfikator bez książki zwraca błąd 404. - Trasa dla
/books/<id>/o nazwiebook_detail, dopasowująca wyłącznie liczby. - Na stronie głównej każdy tytuł prowadzi do strony książki.
Naciśnij Run, kliknij tytuł, a następnie otwórz /books/999/.
Spróbuj swoich sił
from django.shortcuts import render
from .models import Book
def home(request):
books = Book.objects.all()
return render(request, "books/home.html", {"books": books})
Wszystkie lekcje w sekcji Modele i panel administracyjny
Poćwicz samodzielnie: Edytor online Django