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 wiersza identyfikuje go za pomocą klucza głównego, pk: jego id. Wywołanie get() dla brakującego wiersza zgłasza wyjątek, a wyjątek w widoku powoduje awarię: 500 Server Error. get_object_or_404() z django.shortcuts zamiast tego zwraca odpowiedź 404 Page not found. Przyjmuje model, a następnie warunki: get_object_or_404(Book, title="Emma").
Aby utworzyć link 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 na book.
- W pliku
books/views.pynapiszbook_detail(request, pk): wyświetla książkę o tym identyfikatorze lub zwraca błąd 404. - W pliku
books/urls.pyskieruj adres/books/<id>/— tylko liczby — do widokubook_detail. - W pliku
home.htmldodaj do każdego tytułu link do jego strony. Linkiem ma być tylko tytuł:<a ...>Dune</a> (1965).
Na stronie głównej kliknij Dune, a następnie otwórz /books/999/: Nie znaleziono strony (404).
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