Преглед изворни кода

Extend plugins docs to include nav menu links

Jeremy Stretch пре 5 година
родитељ
комит
579c365808
1 измењених фајлова са 26 додато и 1 уклоњено
  1. 26 1
      docs/plugins/development.md

+ 26 - 1
docs/plugins/development.md

@@ -6,6 +6,7 @@ Plugins can do a lot, including:
 
 * Create Django models to store data in the database
 * Provide their own "pages" (views) in the web user interface
+* Inject template content and navigation links
 * Establish their own REST API endpoints
 * Add custom request/response middleware
 
@@ -215,7 +216,7 @@ from django.urls import path
 from .views import RandomAnimalSoundView
 
 urlpatterns = [
-    path('random-sound/', RandomAnimalSoundView.as_view())
+    path('random-sound/', RandomAnimalSoundView.as_view(), name='random_sound')
 ]
 ```
 
@@ -267,3 +268,27 @@ With these three components in place, we can request `/api/plugins/animal-sounds
 
 !!! note
     This example is provided as a minimal reference implementation only. It does not address authentication, performance, or myriad other concerns that plugin authors should have.
+
+## Navigation Menu Items
+
+To make its views easily accessible to users, a plugin can inject items in NetBox's navigation menu. This is done by instantiating NetBox's `PluginNavMenuLink` class. Each instance of this class appears in the navigation menu under the header for its plugin. We'll create a link in the file `navigation.py`:
+
+```python
+from extras.plugins import PluginNavMenuLink
+
+class RandomSoundLink(PluginNavMenuLink):
+    link = 'plugins:netbox_animal_sounds:random_sound'
+    link_text = 'Random sound'
+```
+
+Once we have our menu item defined, we need to register it in `signals.py`:
+
+```python
+from django.dispatch import receiver
+from extras.plugins.signals import register_nav_menu_link_classes
+from .navigation import RandomSoundLink
+
+@receiver(register_nav_menu_link_classes)
+def nav_menu_link_classes(**kwargs):
+    return [RandomSoundLink]
+```