Перейти к содержанию

Навигация

Меню

Плагин может зарегистрировать собственное подменю как часть навигационного меню InfraVision. Это делается путём определения переменной с именем menu в navigation.py, указывающей на экземпляр класса PluginMenu. Каждое меню должно определять метку и сгруппированные пункты меню (обсуждаемые ниже), и может опционально указывать иконку. Пример показан ниже.

navigation.py
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".

navigation.py
menu_items = (item1, item2, item3)

Совет

Путь к списку пунктов меню можно изменить, установив menu_items в экземпляре PluginConfig.

Пункты меню

Каждый пункт меню представляет ссылку и (опционально) набор кнопок, составляющих одну запись в навигационном меню InfraVision. Пункты меню определяются как экземпляры PluginMenuItem. Пример показан ниже.

navigation.py
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