Menu
CoddyTech

Страница для каждой книги

Часть раздела Модели и панель администратора путешествия по 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 %}.

challenge icon

Задание

Средне

Создайте страницу для каждой книги. Шаблон 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