Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Онлайн-библиотека (дополнительное задание)

Задание

Реализуйте онлайн-библиотеку с каталогом книг. Библиотека должна состоять из двух страниц:

  1. /books/ — отображение списка всех книг.
  2. /books/<pub_date>/ — отображение списка книг за определённую дату (формат: ГГГГ-ММ-ДД).

Модель Book

Книга имеет три параметра:

  • name — название книги
  • author — автор
  • pub_date — дата публикации

Страница /books/

Отображает все книги, отсортированные по дате публикации (от новых к старым).

Страница /books/<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:
        break

Использование get_object_or_404

from django.shortcuts import get_object_or_404

# Для страницы книги (если потребуется)
book = get_object_or_404(Book, slug=slug)

Документация по проекту

Установка зависимостей

pip install -r requirements.txt

Создание миграций

python manage.py makemigrations
python manage.py migrate

Загрузка начальных данных

python manage.py loaddata fixtures/books.json

Запуск сервера

python 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 или пустой список Да / Нет