diff --git a/docs/plugins/development/views.md b/docs/plugins/development/views.md index 9781cfa55..cbf920ad5 100644 --- a/docs/plugins/development/views.md +++ b/docs/plugins/development/views.md @@ -196,11 +196,12 @@ Plugins can inject custom content into certain areas of core NetBox views. This | Method | View | Description | |---------------------|-------------|-----------------------------------------------------| | `navbar()` | All | Inject content inside the top navigation bar | +| `list_buttons()` | List view | Add buttons to the top of the page | +| `buttons()` | Object view | Add buttons to the top of the page | +| `alerts()` | Object view | Inject content at the top of the page | | `left_page()` | Object view | Inject content on the left side of the page | | `right_page()` | Object view | Inject content on the right side of the page | | `full_width_page()` | Object view | Inject content across the entire bottom of the page | -| `buttons()` | Object view | Add buttons to the top of the page | -| `list_buttons()` | List view | Add buttons to the top of the page | !!! info "The `navbar()` method was introduced in NetBox v4.1." diff --git a/netbox/netbox/plugins/templates.py b/netbox/netbox/plugins/templates.py index 5fa1959b8..e1f4b7a47 100644 --- a/netbox/netbox/plugins/templates.py +++ b/netbox/netbox/plugins/templates.py @@ -38,6 +38,10 @@ class PluginTemplateExtension: return get_template(template_name).render({**self.context, **extra_context}) + # + # Global methods + # + def navbar(self): """ Content that will be rendered inside the top navigation menu. Content should be returned as an HTML @@ -45,6 +49,37 @@ class PluginTemplateExtension: """ raise NotImplementedError + # + # Object list views + # + + def list_buttons(self): + """ + Buttons that will be rendered and added to the existing list of buttons on the list view. Content + should be returned as an HTML string. Note that content does not need to be marked as safe because this is + automatically handled. + """ + raise NotImplementedError + + # + # Object detail views + # + + def buttons(self): + """ + Buttons that will be rendered and added to the existing list of buttons on the detail page view. Content + should be returned as an HTML string. Note that content does not need to be marked as safe because this is + automatically handled. + """ + raise NotImplementedError + + def alerts(self): + """ + Arbitrary content to be inserted at the top of an object's detail view. Content should be returned as an + HTML string. Note that content does not need to be marked as safe because this is automatically handled. + """ + raise NotImplementedError + def left_page(self): """ Content that will be rendered on the left of the detail page view. Content should be returned as an @@ -65,19 +100,3 @@ class PluginTemplateExtension: HTML string. Note that content does not need to be marked as safe because this is automatically handled. """ raise NotImplementedError - - def buttons(self): - """ - Buttons that will be rendered and added to the existing list of buttons on the detail page view. Content - should be returned as an HTML string. Note that content does not need to be marked as safe because this is - automatically handled. - """ - raise NotImplementedError - - def list_buttons(self): - """ - Buttons that will be rendered and added to the existing list of buttons on the list view. Content - should be returned as an HTML string. Note that content does not need to be marked as safe because this is - automatically handled. - """ - raise NotImplementedError diff --git a/netbox/netbox/tests/dummy_plugin/template_content.py b/netbox/netbox/tests/dummy_plugin/template_content.py index b7157e370..e9a6b9da1 100644 --- a/netbox/netbox/tests/dummy_plugin/template_content.py +++ b/netbox/netbox/tests/dummy_plugin/template_content.py @@ -10,6 +10,12 @@ class GlobalContent(PluginTemplateExtension): class SiteContent(PluginTemplateExtension): models = ['dcim.site'] + def buttons(self): + return "SITE CONTENT - BUTTONS" + + def alerts(self): + return "SITE CONTENT - ALERTS" + def left_page(self): return "SITE CONTENT - LEFT PAGE" @@ -19,9 +25,6 @@ class SiteContent(PluginTemplateExtension): def full_width_page(self): return "SITE CONTENT - FULL WIDTH PAGE" - def buttons(self): - return "SITE CONTENT - BUTTONS" - def list_buttons(self): return "SITE CONTENT - LIST BUTTONS" diff --git a/netbox/templates/base/layout.html b/netbox/templates/base/layout.html index 40e371826..9ab80e0c1 100644 --- a/netbox/templates/base/layout.html +++ b/netbox/templates/base/layout.html @@ -110,6 +110,10 @@ Blocks: