Menu
CoddyTech

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 %}.

challenge icon

Wyzwanie

Średni

Utwórz stronę dla każdej książki. Szablon books/book_detail.html jest gotowy i oczekuje na book.

  1. W pliku books/views.py napisz book_detail(request, pk): wyświetla książkę o tym identyfikatorze lub zwraca błąd 404.
  2. W pliku books/urls.py skieruj adres /books/<id>/ — tylko liczby — do widoku book_detail.
  3. W pliku home.html dodaj 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