Страница для каждой книги
Часть раздела Модели и панель администратора путешествия по Django на Coddy. Урок 14 из 23.
Для каждой книги нужна страница по собственному адресу: /books/1/, /books/2/. Конвертер пути из курса Django Basics захватывает это число и передаёт его представлению. Страница со списком книг за один год:
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 Server Error. Вместо этого get_object_or_404() из django.shortcuts возвращает ответ 404 Page not found. Сначала передай ей модель, затем условия: get_object_or_404(Book, title="Emma").
Чтобы создать ссылку на маршрут, который захватывает значение, укажи это значение после имени: {% url 'books:books_of_year' book.year %}.
Задание
СреднеСоздай страницу для каждой книги. Шаблон books/book_detail.html готов и ожидает book.
- В
books/views.pyнапишиbook_detail(request, pk): она показывает книгу с этим идентификатором или возвращает ответ 404. - В
books/urls.pyнаправь путь/books/<id>/, только с числами, на неё под именемbook_detail. - В
home.htmlдобавь ссылку на страницу каждой книги в её заголовок. Ссылкой должен быть только заголовок:<a ...>Dune</a> (1965).
Нажми на Dune на главной странице, затем открой /books/999/: Страница не найдена (404).
Попробуйте сами
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