Навигация
Меню
Плагин может зарегистрировать собственное подменю как часть навигационного меню InfraVision. Это делается путём определения переменной с именем menu в navigation.py, указывающей на экземпляр класса PluginMenu. Каждое меню должно определять метку и сгруппированные пункты меню (обсуждаемые ниже), и может опционально указывать иконку. Пример показан ниже.
from netbox.plugins import PluginMenu
menu = PluginMenu(
label='My Plugin',
groups=(
('Foo', (item1, item2, item3)),
('Bar', (item4, item5)),
),
icon_class='mdi mdi-router'
)
Обратите внимание, что каждая группа представляет собой кортеж из двух элементов, содержащий метку и итерируемый объект пунктов меню. Метка группы служит заголовком раздела в подменю. Метка группы требуется, даже если у вас только одна группа пунктов.
Совет
Путь к классу меню можно изменить, установив menu в экземпляре PluginConfig.
PluginMenu имеет следующие атрибуты:
| Атрибут | Обязателен | Описание |
|---|---|---|
label |
Да | Текст, отображаемый как заголовок меню |
groups |
Да | Итерируемый объект именованных групп с пунктами |
icon_class |
- | CSS-имя иконки для заголовка |
Совет
Поддерживаемые иконки можно найти на Material Design Icons
Меню по умолчанию
Если у вашего плагина только небольшое количество пунктов меню, может быть желательно использовать общее меню "Plugins" InfraVision вместо создания собственного. Для этого просто объявите menu_items как список PluginMenuItems в navigation.py. Перечисленные пункты появятся под заголовком с названием вашего плагина в подменю "Plugins".
menu_items = (item1, item2, item3)
Совет
Путь к списку пунктов меню можно изменить, установив menu_items в экземпляре PluginConfig.
Пункты меню
Каждый пункт меню представляет ссылку и (опционально) набор кнопок, составляющих одну запись в навигационном меню InfraVision. Пункты меню определяются как экземпляры PluginMenuItem. Пример показан ниже.
from netbox.choices import ButtonColorChoices
from netbox.plugins import PluginMenuButton, PluginMenuItem
item1 = PluginMenuItem(
link='plugins:myplugin:myview',
link_text='Some text',
buttons=(
PluginMenuButton('home', 'Button A', 'fa fa-info', ButtonColorChoices.BLUE),
PluginMenuButton('home', 'Button B', 'fa fa-warning', ButtonColorChoices.GREEN),
)
)
PluginMenuItem имеет следующие атрибуты:
| Атрибут | Обязателен | Описание |
|---|---|---|
link |
Да | Имя пути URL, на который ссылается этот пункт меню |
link_text |
Да | Текст, представленный пользователю |
permissions |
- | Список разрешений, необходимых для отображения этой ссылки |
auth_required |
- | Отображать только для аутентифицированных пользователей |
staff_only |
- | Отображать только для пользователей с is_staff равным true (указанные разрешения также будут требоваться) |
buttons |
- | Итерируемый объект экземпляров PluginMenuButton для включения |
Кнопки меню
Каждый пункт меню может включать набор кнопок. Они могут быть полезны для предоставления ярлыков, связанных с пунктом меню. Например, большинство пунктов в навигационном меню InfraVision включают кнопки для создания и импорта новых объектов.
PluginMenuButton имеет следующие атрибуты:
| Атрибут | Обязателен | Описание |
|---|---|---|
link |
Да | Имя пути URL, на который ссылается эта кнопка |
title |
Да | Текст всплывающей подсказки (отображается при наведении мыши) |
icon_class |
Да | CSS-класс иконки кнопки |
color |
- | Один из вариантов, предоставляемых ButtonColorChoices |
permissions |
- | Список разрешений, необходимых для отображения этой кнопки |
Любые кнопки, связанные с пунктом меню, будут показаны только если у пользователя есть разрешение на просмотр ссылки, независимо от того, какие разрешения установлены на кнопках.
Совет
Поддерживаемые иконки можно найти на Material Design Icons