Нужно сделать django app, который будет реализовывать древовидное меню, соблюдая следующие условия:
- Меню реализовано через template tag
- Все, что над выделенным пунктом - развернуто. Первый уровень вложенности под выделенным пунктом тоже развернут.
- Хранится в БД.
- Редактируется в стандартной админке Django
- Активный пункт меню определяется исходя из URL текущей страницы
- Меню на одной странице может быть несколько. Они определяются по названию.
- При клике на меню происходит переход по заданному в нем URL. URL может быть задан как явным образом, так и через named url.
- На отрисовку каждого меню требуется ровно 1 запрос к БД
Нужен django-app, который позволяет вносить в БД меню (одно или несколько) через админку, и нарисовать на любой нужной
странице меню по названию.
{% draw_menu 'main_menu' %}.
При выполнении задания из библиотек следует использовать только Django и стандартную библиотеку Python. При решении тестового задания у вас не должно возникнуть вопросов. Если появляются вопросы, вероятнее всего, у вас недостаточно знаний. Задание выложить на гитхаб.
- Предположительно, такие меню редактируются не часто и содержат не много данных. Всё, что требуется - это создание меню через админку и отрисовка в UI пользователя. Поэтому в данном случае было решено сделать модель Menu с JSONField, в котором и хранится вся структура меню.
- Была создана форма Node, для более удобной валидации пунктов меню при его создании.
- Был создан тег
draw_menu, который встроен в весь проект, поэтому нет необходимости загружать его на страницах содержащих меню. - Отрисовка меню и процесс его создания в админке реализован через JavaScript.
Создать виртуальное окружение:
python -m venv venvАктивировать виртуальное окружение:
Для Windows
.\venv\Scripts\activateДля Linux
source venv/bin/activate
Установить зависимости:
pip install -r requirements.txtВыполнить команду:
python manage.py fastrun- Зайдите в панель администратора http://127.0.0.1:8000/admin.
- Логин:
admin. Пароль:admin. - Создайте меню, вписав его название. После сохранения появится возможность построить его структуру.
- Можете использовать как внешние, так и внутренние URL или имена URL в проекте, например,
mario. - Для проверки раскрытия меню, создайте меню
main_menu, в котором будет пункт с любым внутренним URL (например http://127.0.0.1:8000/test) и затем перейдите по этому адресу.
| Пакет | Версия |
|---|---|
| Python | 3.11 |
| Django | 4.1.7 |