Реализуйте онлайн-библиотеку с каталогом книг. Библиотека должна состоять из двух страниц:
/books/— отображение списка всех книг./books/<pub_date>/— отображение списка книг за определённую дату (формат: ГГГГ-ММ-ДД).
Книга имеет три параметра:
name— название книгиauthor— авторpub_date— дата публикации
Отображает все книги, отсортированные по дате публикации (от новых к старым).
Отображает книги, опубликованные в указанную дату.
Дополнительно:
- Добавьте ссылки на страницы с книгами за предыдущую и следующую даты (по дате публикации).
- Если книги за предыдущую/следующую дату отсутствуют — ссылки не отображаются.
Пример: В библиотеке есть книги с датами: 2021-05-03, 2021-05-05, 2021-05-10, 2021-05-11.
- На странице
/books/2021-05-05/отображаются книги за 2021-05-05. - Ссылка на предыдущую дату:
/books/2021-05-03/. - Ссылка на следующую дату:
/books/2021-05-10/.
В файле converters.py уже описан конвертер для маршрута с датой. Используйте его в urls.py:
# urls.py
from django.urls import path, register_converter
from . import views, converters
register_converter(converters.DateConverter, 'date')
urlpatterns = [
path('', views.books_view, name='books'),
path('<date:pub_date>/', views.books_view, name='books_by_date'),
]books = Book.objects.filter(pub_date=pub_date)from datetime import timedelta
# Все уникальные даты
dates = Book.objects.values_list('pub_date', flat=True).distinct().order_by('pub_date')
# Текущая дата
current_date = pub_date
# Предыдущая дата
prev_date = None
for date in dates:
if date < current_date:
prev_date = date
else:
break
# Следующая дата
next_date = None
for date in reversed(dates):
if date > current_date:
next_date = date
else:
breakfrom django.shortcuts import get_object_or_404
# Для страницы книги (если потребуется)
book = get_object_or_404(Book, slug=slug)pip install -r requirements.txtpython manage.py makemigrations
python manage.py migratepython manage.py loaddata fixtures/books.jsonpython manage.py runserver| № | Критерий | Результат |
|---|---|---|
| 1 | Модель Book создана с полями name, author, pub_date |
Да / Нет |
| 2 | Страница /books/ отображает все книги |
Да / Нет |
| 3 | Страница /books/ отображает книги в правильном порядке |
Да / Нет |
| 4 | Страница /books/<pub_date>/ отображает книги за указанную дату |
Да / Нет |
| 5 | На странице /books/<pub_date>/ есть ссылка на предыдущую дату (если есть) |
Да / Нет |
| 6 | На странице /books/<pub_date>/ есть ссылка на следующую дату (если есть) |
Да / Нет |
| 7 | Ссылки на предыдущую/следующую дату ведут на правильные URL | Да / Нет |
| 8 | Если книги за предыдущую/следующую дату отсутствуют — ссылки не отображаются | Да / Нет |
| 9 | При запросе несуществующей даты отображается 404 или пустой список | Да / Нет |

