Страница для каждой книги
Часть раздела Модели и панель администратора путешествия по Django на Coddy. Урок 14 из 23.
Каждой книге нужна страница по собственному адресу: /books/1/, /books/2/. Конвертер пути из раздела «Основы Django» захватывает это число и передаёт его представлению. Страница с книгами за один год:
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})На странице для одной записи её обозначают первичным ключом, pk: её id. Если запись не найдена, get() вызывает исключение, а исключение в представлении приводит к сбою — ошибке 500 на сервере. get_object_or_404() из django.shortcuts вместо этого отвечает ошибкой 404 «Страница не найдена». Сначала ему передают модель, затем условия: get_object_or_404(Book, title="Emma").
Чтобы создать ссылку на маршрут, который захватывает значение, укажите это значение после имени: {% url 'books:books_of_year' book.year %}.
Задание
СреднеСоздайте страницу для каждой книги. Шаблон books/book_detail.html готов и ожидает book.
- Представление
book_detail(request, pk). Если книги с таким идентификатором нет, возвращается ошибка 404. - Маршрут для
/books/<id>/с именемbook_detail, принимающий только числа. - На главной странице каждая книга ссылается на свою страницу.
Нажмите Run, выберите книгу, затем откройте /books/999/.
Попробуйте сами
from django.shortcuts import render
from .models import Book
def home(request):
books = Book.objects.all()
return render(request, "books/home.html", {"books": books})
Все уроки раздела Модели и панель администратора
Потренируйтесь самостоятельно: Песочница Django