nautobot 2.4.18__py3-none-any.whl → 2.4.19__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (583) hide show
  1. nautobot/apps/ui.py +6 -0
  2. nautobot/circuits/tables.py +1 -1
  3. nautobot/circuits/templates/circuits/circuit_create.html +7 -7
  4. nautobot/circuits/templates/circuits/circuit_retrieve.html +1 -5
  5. nautobot/circuits/templates/circuits/circuittermination_create.html +26 -26
  6. nautobot/circuits/templates/circuits/inc/circuit_termination.html +20 -20
  7. nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +3 -3
  8. nautobot/circuits/templates/circuits/inc/circuit_termination_speed_fragment.html +7 -7
  9. nautobot/circuits/templates/circuits/providernetwork_retrieve.html +1 -3
  10. nautobot/circuits/views.py +26 -9
  11. nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +1 -4
  12. nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +1 -7
  13. nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +1 -3
  14. nautobot/cloud/templates/cloud/cloudservice_retrieve.html +1 -5
  15. nautobot/cloud/views.py +45 -0
  16. nautobot/core/graphql/generators.py +5 -2
  17. nautobot/core/jobs/bulk_actions.py +48 -85
  18. nautobot/core/models/querysets.py +2 -1
  19. nautobot/core/templates/40x.html +15 -15
  20. nautobot/core/templates/500.html +21 -21
  21. nautobot/core/templates/admin/app_index.html +8 -8
  22. nautobot/core/templates/admin/base.html +104 -104
  23. nautobot/core/templates/admin/change_form.html +65 -65
  24. nautobot/core/templates/admin/change_list.html +60 -60
  25. nautobot/core/templates/admin/change_list_results.html +39 -39
  26. nautobot/core/templates/admin/config/config.html +47 -47
  27. nautobot/core/templates/admin/delete_confirmation.html +47 -47
  28. nautobot/core/templates/admin/edit_inline/stacked.html +124 -124
  29. nautobot/core/templates/admin/edit_inline/tabular.html +60 -60
  30. nautobot/core/templates/admin/includes/fieldset.html +4 -4
  31. nautobot/core/templates/admin/index.html +60 -60
  32. nautobot/core/templates/admin/prepopulated_fields_js.html +18 -18
  33. nautobot/core/templates/admin/submit_line.html +4 -4
  34. nautobot/core/templates/base_django.html +46 -46
  35. nautobot/core/templates/buttons/consolidated_bulk_action_buttons.html +8 -8
  36. nautobot/core/templates/buttons/consolidated_detail_view_action_buttons.html +8 -8
  37. nautobot/core/templates/buttons/export.html +3 -3
  38. nautobot/core/templates/components/breadcrumbs.html +5 -5
  39. nautobot/core/templates/components/button/default.html +3 -3
  40. nautobot/core/templates/components/button/dropdown.html +7 -7
  41. nautobot/core/templates/components/button/formbutton.html +4 -4
  42. nautobot/core/templates/components/panel/body_content_data_table.html +1 -1
  43. nautobot/core/templates/components/panel/body_wrapper_generic_table.html +3 -0
  44. nautobot/core/templates/components/panel/footer_content_table.html +3 -1
  45. nautobot/core/templates/components/panel/header_extra_content_table.html +10 -1
  46. nautobot/core/templates/components/tab/content_wrapper.html +1 -1
  47. nautobot/core/templates/components/tab/label_wrapper.html +1 -1
  48. nautobot/core/templates/components/tab/label_wrapper_distinct_view.html +10 -3
  49. nautobot/core/templates/generic/object_bulk_add_component.html +40 -40
  50. nautobot/core/templates/generic/object_bulk_create.html +3 -3
  51. nautobot/core/templates/generic/object_bulk_destroy.html +6 -6
  52. nautobot/core/templates/generic/object_bulk_update.html +52 -52
  53. nautobot/core/templates/generic/object_import.html +33 -33
  54. nautobot/core/templates/generic/object_list.html +267 -267
  55. nautobot/core/templates/generic/object_retrieve.html +261 -261
  56. nautobot/core/templates/graphene/graphiql.html +127 -127
  57. nautobot/core/templates/home.html +62 -62
  58. nautobot/core/templates/inc/computed_fields/panel_data.html +13 -13
  59. nautobot/core/templates/inc/created_updated.html +8 -8
  60. nautobot/core/templates/inc/custom_fields/panel_data.html +13 -13
  61. nautobot/core/templates/inc/dynamic_groups_panel.html +11 -11
  62. nautobot/core/templates/inc/footer.html +19 -19
  63. nautobot/core/templates/inc/javascript.html +1 -1
  64. nautobot/core/templates/inc/media.html +46 -46
  65. nautobot/core/templates/inc/nav_menu.html +1 -1
  66. nautobot/core/templates/inc/relationships_table_rows.html +22 -22
  67. nautobot/core/templates/inc/tenant_table_row.html +1 -1
  68. nautobot/core/templates/login.html +77 -77
  69. nautobot/core/templates/media_failure.html +38 -38
  70. nautobot/core/templates/panel_table.html +1 -1
  71. nautobot/core/templates/rest_framework/api.html +3 -3
  72. nautobot/core/templates/search.html +1 -1
  73. nautobot/core/templates/swagger_ui.html +9 -9
  74. nautobot/core/templates/utilities/confirmation_form.html +18 -18
  75. nautobot/core/templates/utilities/render_field.html +1 -1
  76. nautobot/core/templates/utilities/render_jinja2.html +43 -43
  77. nautobot/core/templates/utilities/templatetags/filter_form_modal.html +56 -56
  78. nautobot/core/templates/utilities/templatetags/utilization_graph.html +1 -1
  79. nautobot/core/templates/utilities/theme_preview.html +799 -799
  80. nautobot/core/templates/utilities/worker_status.html +122 -122
  81. nautobot/core/templates/widgets/clearable_file.html +3 -3
  82. nautobot/core/templates/widgets/sluginput.html +1 -1
  83. nautobot/core/templatetags/buttons.py +8 -2
  84. nautobot/core/templatetags/helpers.py +1 -1
  85. nautobot/core/testing/integration.py +7 -4
  86. nautobot/core/testing/views.py +24 -5
  87. nautobot/core/tests/test_breadcrumbs.py +78 -4
  88. nautobot/core/tests/test_commands.py +7 -4
  89. nautobot/core/tests/test_graphql.py +20 -5
  90. nautobot/core/tests/test_jobs.py +34 -21
  91. nautobot/core/tests/test_ui.py +175 -1
  92. nautobot/core/tests/test_utils.py +35 -0
  93. nautobot/core/tests/test_views_generic.py +43 -0
  94. nautobot/core/tests/test_views_utils.py +239 -5
  95. nautobot/core/ui/breadcrumbs.py +208 -21
  96. nautobot/core/ui/bulk_buttons.py +8 -0
  97. nautobot/core/ui/object_detail.py +138 -55
  98. nautobot/core/ui/titles.py +1 -0
  99. nautobot/core/utils/requests.py +27 -2
  100. nautobot/core/views/generic.py +41 -31
  101. nautobot/core/views/mixins.py +80 -110
  102. nautobot/core/views/utils.py +153 -1
  103. nautobot/dcim/api/serializers.py +8 -2
  104. nautobot/dcim/constants.py +1 -0
  105. nautobot/dcim/factory.py +4 -3
  106. nautobot/dcim/filters/mixins.py +1 -2
  107. nautobot/dcim/forms.py +5 -1
  108. nautobot/dcim/migrations/0074_alter_rack_u_height.py +21 -0
  109. nautobot/dcim/models/devices.py +26 -1
  110. nautobot/dcim/models/racks.py +2 -2
  111. nautobot/dcim/templates/dcim/cable.html +53 -53
  112. nautobot/dcim/templates/dcim/cable_connect.html +182 -182
  113. nautobot/dcim/templates/dcim/cable_trace.html +1 -1
  114. nautobot/dcim/templates/dcim/console_port_connection_list.html +5 -5
  115. nautobot/dcim/templates/dcim/consoleport.html +86 -86
  116. nautobot/dcim/templates/dcim/consoleserverport.html +86 -86
  117. nautobot/dcim/templates/dcim/controller_create.html +34 -34
  118. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +68 -68
  119. nautobot/dcim/templates/dcim/device/base.html +1 -104
  120. nautobot/dcim/templates/dcim/device/config.html +17 -17
  121. nautobot/dcim/templates/dcim/device/consoleports.html +1 -52
  122. nautobot/dcim/templates/dcim/device/consoleserverports.html +1 -52
  123. nautobot/dcim/templates/dcim/device/devicebays.html +1 -48
  124. nautobot/dcim/templates/dcim/device/frontports.html +1 -52
  125. nautobot/dcim/templates/dcim/device/interfaces.html +1 -56
  126. nautobot/dcim/templates/dcim/device/inventory.html +1 -48
  127. nautobot/dcim/templates/dcim/device/lldp_neighbors.html +64 -64
  128. nautobot/dcim/templates/dcim/device/modulebays.html +1 -48
  129. nautobot/dcim/templates/dcim/device/poweroutlets.html +1 -52
  130. nautobot/dcim/templates/dcim/device/powerports.html +1 -52
  131. nautobot/dcim/templates/dcim/device/rearports.html +1 -52
  132. nautobot/dcim/templates/dcim/device/status.html +66 -66
  133. nautobot/dcim/templates/dcim/device/wireless.html +1 -72
  134. nautobot/dcim/templates/dcim/device.html +4 -422
  135. nautobot/dcim/templates/dcim/device_component_add.html +25 -25
  136. nautobot/dcim/templates/dcim/device_create.html +229 -0
  137. nautobot/dcim/templates/dcim/device_edit.html +2 -227
  138. nautobot/dcim/templates/dcim/devicebay.html +41 -41
  139. nautobot/dcim/templates/dcim/devicebay_populate.html +32 -32
  140. nautobot/dcim/templates/dcim/devicetype_component_add.html +28 -28
  141. nautobot/dcim/templates/dcim/devicetype_retrieve.html +1 -3
  142. nautobot/dcim/templates/dcim/frontport.html +84 -84
  143. nautobot/dcim/templates/dcim/inc/cable_toggle_buttons.html +1 -1
  144. nautobot/dcim/templates/dcim/inc/device_interface_filter.html +8 -0
  145. nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +1 -15
  146. nautobot/dcim/templates/dcim/inc/location_hierarchy.html +22 -22
  147. nautobot/dcim/templates/dcim/interface.html +206 -206
  148. nautobot/dcim/templates/dcim/interface_connection_list.html +5 -5
  149. nautobot/dcim/templates/dcim/interfaceredundancygroupassociation_create.html +6 -6
  150. nautobot/dcim/templates/dcim/inventoryitem.html +44 -44
  151. nautobot/dcim/templates/dcim/inventoryitem_add.html +32 -32
  152. nautobot/dcim/templates/dcim/inventoryitem_edit.html +22 -22
  153. nautobot/dcim/templates/dcim/location_migrate_data_to_contact.html +46 -46
  154. nautobot/dcim/templates/dcim/location_retrieve.html +1 -7
  155. nautobot/dcim/templates/dcim/locationtype.html +1 -6
  156. nautobot/dcim/templates/dcim/locationtype_retrieve.html +1 -7
  157. nautobot/dcim/templates/dcim/module/base.html +85 -85
  158. nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
  159. nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
  160. nautobot/dcim/templates/dcim/module_retrieve.html +52 -52
  161. nautobot/dcim/templates/dcim/module_update.html +61 -61
  162. nautobot/dcim/templates/dcim/modulebay_destroy.html +1 -1
  163. nautobot/dcim/templates/dcim/modulebay_retrieve.html +85 -85
  164. nautobot/dcim/templates/dcim/modulebay_update.html +33 -33
  165. nautobot/dcim/templates/dcim/modulefamily_retrieve.html +1 -1
  166. nautobot/dcim/templates/dcim/moduletype_retrieve.html +140 -144
  167. nautobot/dcim/templates/dcim/platform_create.html +38 -38
  168. nautobot/dcim/templates/dcim/power_port_connection_list.html +5 -5
  169. nautobot/dcim/templates/dcim/powerfeed_retrieve.html +1 -8
  170. nautobot/dcim/templates/dcim/poweroutlet.html +85 -85
  171. nautobot/dcim/templates/dcim/powerpanel_retrieve.html +1 -8
  172. nautobot/dcim/templates/dcim/powerport.html +91 -91
  173. nautobot/dcim/templates/dcim/rack_elevation_list.html +18 -18
  174. nautobot/dcim/templates/dcim/rack_retrieve.html +264 -274
  175. nautobot/dcim/templates/dcim/rackreservation_retrieve.html +0 -3
  176. nautobot/dcim/templates/dcim/rearport.html +78 -78
  177. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -5
  178. nautobot/dcim/tests/integration/test_device_bulk_operations.py +3 -2
  179. nautobot/dcim/tests/integration/test_location_bulk_operations.py +6 -2
  180. nautobot/dcim/tests/test_api.py +33 -1
  181. nautobot/dcim/tests/test_views.py +148 -4
  182. nautobot/dcim/ui.py +29 -0
  183. nautobot/dcim/urls.py +1 -109
  184. nautobot/dcim/utils.py +30 -0
  185. nautobot/dcim/views.py +1009 -531
  186. nautobot/extras/tables.py +20 -0
  187. nautobot/extras/templates/extras/computedfield_edit.html +4 -4
  188. nautobot/extras/templates/extras/configcontext_update.html +1 -1
  189. nautobot/extras/templates/extras/configcontextschema_retrieve.html +32 -32
  190. nautobot/extras/templates/extras/customfield_update.html +23 -23
  191. nautobot/extras/templates/extras/dynamicgroup_retrieve.html +38 -38
  192. nautobot/extras/templates/extras/dynamicgroup_update.html +62 -62
  193. nautobot/extras/templates/extras/gitrepository_list.html +10 -10
  194. nautobot/extras/templates/extras/gitrepository_retrieve.html +68 -68
  195. nautobot/extras/templates/extras/graphqlquery_retrieve.html +73 -73
  196. nautobot/extras/templates/extras/inc/configcontext_format.html +2 -2
  197. nautobot/extras/templates/extras/inc/job_table.html +10 -10
  198. nautobot/extras/templates/extras/inc/jobresult.html +21 -21
  199. nautobot/extras/templates/extras/inc/jobresult_js.html +6 -6
  200. nautobot/extras/templates/extras/inc/tags_panel.html +10 -10
  201. nautobot/extras/templates/extras/job.html +64 -64
  202. nautobot/extras/templates/extras/job_approval_request.html +9 -9
  203. nautobot/extras/templates/extras/job_bulk_edit.html +13 -13
  204. nautobot/extras/templates/extras/job_edit.html +45 -45
  205. nautobot/extras/templates/extras/job_list.html +4 -4
  206. nautobot/extras/templates/extras/jobresult_retrieve.html +0 -25
  207. nautobot/extras/templates/extras/marketplace.html +101 -101
  208. nautobot/extras/templates/extras/metadatatype_create.html +20 -20
  209. nautobot/extras/templates/extras/object_assign_contact_or_team.html +18 -18
  210. nautobot/extras/templates/extras/object_configcontext.html +1 -3
  211. nautobot/extras/templates/extras/objectchange.html +2 -165
  212. nautobot/extras/templates/extras/objectchange_retrieve.html +165 -0
  213. nautobot/extras/templates/extras/plugin_detail.html +41 -41
  214. nautobot/extras/templates/extras/plugins_list.html +9 -9
  215. nautobot/extras/templates/extras/plugins_tiles.html +26 -26
  216. nautobot/extras/templates/extras/relationship_edit.html +4 -4
  217. nautobot/extras/templates/extras/role_retrieve.html +13 -13
  218. nautobot/extras/templates/extras/scheduled_jobs_approval_queue_list.html +21 -21
  219. nautobot/extras/templates/extras/scheduledjob.html +128 -128
  220. nautobot/extras/templates/extras/secret_create.html +53 -53
  221. nautobot/extras/templates/extras/secretsgroup_update.html +13 -13
  222. nautobot/extras/templates/extras/templatetags/plugin_object_detail_tabs.html +3 -3
  223. nautobot/extras/templates/extras/webhook.html +79 -79
  224. nautobot/extras/tests/integration/test_relationships.py +6 -6
  225. nautobot/extras/tests/test_filters.py +1 -1
  226. nautobot/extras/tests/test_jobs.py +2 -0
  227. nautobot/extras/tests/test_views.py +3 -3
  228. nautobot/extras/urls.py +1 -3
  229. nautobot/extras/views.py +101 -27
  230. nautobot/ipam/filters.py +2 -2
  231. nautobot/ipam/migrations/0053_alter_vrfdeviceassignment_options_and_more.py +20 -0
  232. nautobot/ipam/models.py +34 -0
  233. nautobot/ipam/tables.py +3 -1
  234. nautobot/ipam/templates/ipam/inc/prefix_header_extra_content_table.html +4 -0
  235. nautobot/ipam/templates/ipam/inc/toggle_available.html +8 -8
  236. nautobot/ipam/templates/ipam/inc/vlangroup_header.html +4 -4
  237. nautobot/ipam/templates/ipam/ipaddress.html +119 -123
  238. nautobot/ipam/templates/ipam/ipaddress_assign.html +10 -10
  239. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -1
  240. nautobot/ipam/templates/ipam/ipaddress_merge.html +180 -180
  241. nautobot/ipam/templates/ipam/ipaddresstointerface_retrieve.html +48 -48
  242. nautobot/ipam/templates/ipam/prefix.html +2 -107
  243. nautobot/ipam/templates/ipam/prefix_create.html +34 -0
  244. nautobot/ipam/templates/ipam/prefix_edit.html +1 -34
  245. nautobot/ipam/templates/ipam/prefix_retrieve.html +3 -0
  246. nautobot/ipam/templates/ipam/service_retrieve.html +1 -6
  247. nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -7
  248. nautobot/ipam/templates/ipam/vrf_edit.html +1 -1
  249. nautobot/ipam/tests/test_views.py +34 -0
  250. nautobot/ipam/ui.py +145 -0
  251. nautobot/ipam/urls.py +1 -46
  252. nautobot/ipam/utils/__init__.py +26 -0
  253. nautobot/ipam/views.py +219 -106
  254. nautobot/project-static/docs/404.html +11 -11
  255. nautobot/project-static/docs/apps/index.html +11 -11
  256. nautobot/project-static/docs/apps/nautobot-apps.html +11 -11
  257. nautobot/project-static/docs/assets/javascripts/{bundle.92b07e13.min.js → bundle.f55a23d4.min.js} +2 -2
  258. nautobot/project-static/docs/assets/javascripts/{bundle.92b07e13.min.js.map → bundle.f55a23d4.min.js.map} +2 -2
  259. nautobot/project-static/docs/assets/stylesheets/{main.7e37652d.min.css → main.e53b48f4.min.css} +1 -1
  260. nautobot/project-static/docs/assets/stylesheets/{main.7e37652d.min.css.map → main.e53b48f4.min.css.map} +1 -1
  261. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +11 -11
  262. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +11 -11
  263. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +11 -11
  264. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +11 -11
  265. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +11 -11
  266. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +11 -11
  267. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +11 -11
  268. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +11 -11
  269. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +11 -11
  270. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +11 -11
  271. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +11 -11
  272. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +11 -11
  273. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +11 -11
  274. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +11 -11
  275. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +11 -11
  276. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -11
  277. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +11 -11
  278. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +11 -11
  279. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -11
  280. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +11 -11
  281. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +2174 -1226
  282. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +11 -11
  283. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +12 -12
  284. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +72 -27
  285. nautobot/project-static/docs/development/apps/api/configuration-view.html +11 -11
  286. nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -11
  287. nautobot/project-static/docs/development/apps/api/models/django-admin.html +11 -11
  288. nautobot/project-static/docs/development/apps/api/models/global-search.html +11 -11
  289. nautobot/project-static/docs/development/apps/api/models/graphql.html +11 -11
  290. nautobot/project-static/docs/development/apps/api/models/index.html +11 -11
  291. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +11 -11
  292. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +11 -11
  293. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +11 -11
  294. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +11 -11
  295. nautobot/project-static/docs/development/apps/api/platform-features/index.html +11 -11
  296. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -11
  297. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +11 -11
  298. nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +11 -11
  299. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +11 -11
  300. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +11 -11
  301. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +11 -11
  302. nautobot/project-static/docs/development/apps/api/prometheus.html +11 -11
  303. nautobot/project-static/docs/development/apps/api/setup.html +11 -11
  304. nautobot/project-static/docs/development/apps/api/testing.html +11 -11
  305. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +11 -11
  306. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +11 -11
  307. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +11 -11
  308. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +11 -11
  309. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +11 -11
  310. nautobot/project-static/docs/development/apps/api/views/base-template.html +11 -11
  311. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +11 -11
  312. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +11 -11
  313. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +11 -11
  314. nautobot/project-static/docs/development/apps/api/views/index.html +11 -11
  315. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +11 -11
  316. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +11 -11
  317. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +11 -11
  318. nautobot/project-static/docs/development/apps/api/views/notes.html +11 -11
  319. nautobot/project-static/docs/development/apps/api/views/rest-api.html +11 -11
  320. nautobot/project-static/docs/development/apps/api/views/urls.html +11 -11
  321. nautobot/project-static/docs/development/apps/index.html +11 -11
  322. nautobot/project-static/docs/development/apps/migration/code-updates.html +11 -11
  323. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +11 -11
  324. nautobot/project-static/docs/development/apps/migration/from-v1.html +11 -11
  325. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +11 -11
  326. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +11 -11
  327. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +11 -11
  328. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +11 -11
  329. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +11 -11
  330. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +11 -11
  331. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +11 -11
  332. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +11 -11
  333. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +11 -11
  334. nautobot/project-static/docs/development/apps/porting-from-netbox.html +11 -11
  335. nautobot/project-static/docs/development/core/application-registry.html +11 -11
  336. nautobot/project-static/docs/development/core/best-practices.html +11 -11
  337. nautobot/project-static/docs/development/core/bootstrap-ui.html +11 -11
  338. nautobot/project-static/docs/development/core/caching.html +11 -11
  339. nautobot/project-static/docs/development/core/controllers.html +11 -11
  340. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +11 -11
  341. nautobot/project-static/docs/development/core/generic-views.html +11 -11
  342. nautobot/project-static/docs/development/core/getting-started.html +50 -48
  343. nautobot/project-static/docs/development/core/homepage.html +11 -11
  344. nautobot/project-static/docs/development/core/index.html +11 -11
  345. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +11 -11
  346. nautobot/project-static/docs/development/core/model-checklist.html +11 -11
  347. nautobot/project-static/docs/development/core/model-features.html +11 -11
  348. nautobot/project-static/docs/development/core/natural-keys.html +11 -11
  349. nautobot/project-static/docs/development/core/navigation-menu.html +11 -11
  350. nautobot/project-static/docs/development/core/release-checklist.html +11 -11
  351. nautobot/project-static/docs/development/core/role-internals.html +11 -11
  352. nautobot/project-static/docs/development/core/settings.html +11 -11
  353. nautobot/project-static/docs/development/core/style-guide.html +15 -11
  354. nautobot/project-static/docs/development/core/templates.html +11 -11
  355. nautobot/project-static/docs/development/core/testing.html +11 -11
  356. nautobot/project-static/docs/development/core/ui-component-framework.html +11 -11
  357. nautobot/project-static/docs/development/core/user-preferences.html +11 -11
  358. nautobot/project-static/docs/development/index.html +11 -11
  359. nautobot/project-static/docs/development/jobs/getting-started.html +11 -11
  360. nautobot/project-static/docs/development/jobs/index.html +11 -11
  361. nautobot/project-static/docs/development/jobs/installation.html +11 -11
  362. nautobot/project-static/docs/development/jobs/job-extensions.html +11 -11
  363. nautobot/project-static/docs/development/jobs/job-logging.html +11 -11
  364. nautobot/project-static/docs/development/jobs/job-patterns.html +11 -11
  365. nautobot/project-static/docs/development/jobs/job-structure.html +11 -11
  366. nautobot/project-static/docs/development/jobs/migration/from-v1.html +11 -11
  367. nautobot/project-static/docs/development/jobs/testing.html +11 -11
  368. nautobot/project-static/docs/index.html +11 -11
  369. nautobot/project-static/docs/objects.inv +0 -0
  370. nautobot/project-static/docs/overview/application_stack.html +11 -11
  371. nautobot/project-static/docs/overview/design_philosophy.html +11 -11
  372. nautobot/project-static/docs/release-notes/index.html +11 -11
  373. nautobot/project-static/docs/release-notes/version-1.0.html +11 -11
  374. nautobot/project-static/docs/release-notes/version-1.1.html +11 -11
  375. nautobot/project-static/docs/release-notes/version-1.2.html +11 -11
  376. nautobot/project-static/docs/release-notes/version-1.3.html +11 -11
  377. nautobot/project-static/docs/release-notes/version-1.4.html +11 -11
  378. nautobot/project-static/docs/release-notes/version-1.5.html +11 -11
  379. nautobot/project-static/docs/release-notes/version-1.6.html +11 -11
  380. nautobot/project-static/docs/release-notes/version-2.0.html +11 -11
  381. nautobot/project-static/docs/release-notes/version-2.1.html +11 -11
  382. nautobot/project-static/docs/release-notes/version-2.2.html +11 -11
  383. nautobot/project-static/docs/release-notes/version-2.3.html +11 -11
  384. nautobot/project-static/docs/release-notes/version-2.4.html +196 -11
  385. nautobot/project-static/docs/search/search_index.json +1 -1
  386. nautobot/project-static/docs/sitemap.xml +300 -300
  387. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  388. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +11 -11
  389. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +11 -11
  390. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +11 -11
  391. nautobot/project-static/docs/user-guide/administration/configuration/index.html +11 -11
  392. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +11 -11
  393. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +11 -11
  394. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +11 -11
  395. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +89 -14
  396. nautobot/project-static/docs/user-guide/administration/guides/docker.html +11 -11
  397. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +11 -11
  398. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +11 -11
  399. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +11 -11
  400. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +11 -11
  401. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +11 -11
  402. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +11 -11
  403. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +11 -11
  404. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +11 -11
  405. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +11 -11
  406. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +11 -11
  407. nautobot/project-static/docs/user-guide/administration/installation/index.html +11 -11
  408. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +11 -11
  409. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +11 -11
  410. nautobot/project-static/docs/user-guide/administration/installation/services.html +11 -11
  411. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +11 -11
  412. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +11 -11
  413. nautobot/project-static/docs/user-guide/administration/security/index.html +11 -11
  414. nautobot/project-static/docs/user-guide/administration/security/notices.html +11 -11
  415. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +11 -11
  416. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +11 -11
  417. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +11 -11
  418. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +11 -11
  419. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +11 -11
  420. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +11 -11
  421. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +11 -11
  422. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +11 -11
  423. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +11 -11
  424. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +11 -11
  425. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +11 -11
  426. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +11 -11
  427. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +11 -11
  428. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +11 -11
  429. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +11 -11
  430. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +11 -11
  431. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +11 -11
  432. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +11 -11
  433. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +11 -11
  434. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +11 -11
  435. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +11 -11
  436. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +11 -11
  437. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +11 -11
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +11 -11
  439. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +11 -11
  440. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +11 -11
  441. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +11 -11
  442. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +11 -11
  443. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +11 -11
  444. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +11 -11
  445. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +11 -11
  446. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +11 -11
  447. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +11 -11
  448. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +11 -11
  449. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +11 -11
  450. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +11 -11
  451. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +11 -11
  452. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +11 -11
  453. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +11 -11
  454. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +11 -11
  455. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +11 -11
  456. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +11 -11
  457. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +11 -11
  458. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +11 -11
  459. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +11 -11
  460. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +11 -11
  461. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +11 -11
  462. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +11 -11
  463. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +11 -11
  464. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +11 -11
  465. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +11 -11
  466. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +11 -11
  467. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +11 -11
  468. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +11 -11
  469. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +11 -11
  470. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +11 -11
  471. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +11 -11
  472. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +11 -11
  473. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +11 -11
  474. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +11 -11
  475. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +11 -11
  476. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +11 -11
  477. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +11 -11
  478. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +11 -11
  479. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +11 -11
  480. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +11 -11
  481. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +11 -11
  482. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +11 -11
  483. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -11
  484. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -11
  485. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +11 -11
  486. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +11 -11
  487. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +11 -11
  488. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +11 -11
  489. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +11 -11
  490. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +11 -11
  491. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +11 -11
  492. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +11 -11
  493. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +11 -11
  494. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +11 -11
  495. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +11 -11
  496. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +11 -11
  497. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +11 -11
  498. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +11 -11
  499. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +11 -11
  500. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +11 -11
  501. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +11 -11
  502. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +11 -11
  503. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +11 -11
  504. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +11 -11
  505. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +11 -11
  506. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +11 -11
  507. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +11 -11
  508. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +11 -11
  509. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +11 -11
  510. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +11 -11
  511. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +11 -11
  512. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +11 -11
  513. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +11 -11
  514. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +11 -11
  515. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +11 -11
  516. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +11 -11
  517. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +11 -11
  518. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +11 -11
  519. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +11 -11
  520. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +11 -11
  521. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +11 -11
  522. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +11 -11
  523. nautobot/project-static/docs/user-guide/index.html +11 -11
  524. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +11 -11
  525. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +11 -11
  526. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +11 -11
  527. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +11 -11
  528. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +11 -11
  529. nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -11
  530. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +11 -11
  531. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +11 -11
  532. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +11 -11
  533. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +11 -11
  534. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +11 -11
  535. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +11 -11
  536. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +11 -11
  537. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +11 -11
  538. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +11 -11
  539. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +11 -11
  540. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +11 -11
  541. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +11 -11
  542. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +11 -11
  543. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +11 -11
  544. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +11 -11
  545. nautobot/project-static/docs/user-guide/platform-functionality/note.html +11 -11
  546. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +11 -11
  547. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +11 -11
  548. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +11 -11
  549. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +11 -11
  550. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +11 -11
  551. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +11 -11
  552. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +11 -11
  553. nautobot/project-static/docs/user-guide/platform-functionality/role.html +11 -11
  554. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +11 -11
  555. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -11
  556. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +11 -11
  557. nautobot/project-static/docs/user-guide/platform-functionality/status.html +11 -11
  558. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +11 -11
  559. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +11 -11
  560. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +11 -11
  561. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +11 -11
  562. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +11 -11
  563. nautobot/tenancy/templates/tenancy/tenant.html +1 -7
  564. nautobot/tenancy/views.py +13 -0
  565. nautobot/users/templates/users/api_tokens.html +4 -4
  566. nautobot/users/templates/users/base.html +28 -28
  567. nautobot/virtualization/templates/virtualization/cluster.html +64 -64
  568. nautobot/virtualization/templates/virtualization/inc/virtualmachine_vminterface_filter.html +8 -0
  569. nautobot/virtualization/templates/virtualization/virtualmachine_component_add.html +25 -25
  570. nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +1 -251
  571. nautobot/virtualization/templates/virtualization/vminterface.html +70 -70
  572. nautobot/virtualization/urls.py +0 -12
  573. nautobot/virtualization/views.py +158 -54
  574. nautobot/wireless/templates/wireless/wirelessnetwork_create.html +13 -13
  575. nautobot/wireless/tests/integration/test_radio_profile.py +1 -1
  576. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/METADATA +1 -1
  577. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/RECORD +581 -570
  578. nautobot/ipam/templates/ipam/prefix_ipaddresses.html +0 -11
  579. nautobot/ipam/templates/ipam/prefix_prefixes.html +0 -11
  580. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/LICENSE.txt +0 -0
  581. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/NOTICE +0 -0
  582. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/WHEEL +0 -0
  583. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  <link rel="icon" href="../../../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.20">
22
22
 
23
23
 
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- <link rel="stylesheet" href="../../../assets/stylesheets/main.7e37652d.min.css">
29
+ <link rel="stylesheet" href="../../../assets/stylesheets/main.e53b48f4.min.css">
30
30
 
31
31
 
32
32
  <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.0.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M288%200H128c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032v151.5L7.5%20426.3C2.6%20435%200%20444.7%200%20454.7%200%20486.4%2025.6%20512%2057.3%20512h333.4c31.6%200%2057.3-25.6%2057.3-57.3%200-10-2.6-19.8-7.5-28.4L320%20215.5V64c17.7%200%2032-14.3%2032-32S337.7%200%20320%200zm-96%20215.5V64h64v151.5c0%2011.1%202.9%2022.1%208.4%2031.8L306%20320H142l41.6-72.7c5.5-9.7%208.4-20.6%208.4-31.8%22/%3E%3C/svg%3E');}</style>
43
+ <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20448%20512%22%3E%3C%21--%21%20Font%20Awesome%20Free%207.0.0%20by%20%40fontawesome%20-%20https%3A//fontawesome.com%20License%20-%20https%3A//fontawesome.com/license/free%20%28Icons%3A%20CC%20BY%204.0%2C%20Fonts%3A%20SIL%20OFL%201.1%2C%20Code%3A%20MIT%20License%29%20Copyright%202025%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M288%200H128c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032v151.5L7.5%20426.3C2.6%20435%200%20444.7%200%20454.7%200%20486.4%2025.6%20512%2057.3%20512h333.4c31.6%200%2057.3-25.6%2057.3-57.3%200-10-2.6-19.8-7.5-28.4L320%20215.5V64c17.7%200%2032-14.3%2032-32S337.7%200%20320%200zm-96%20215.5V64h64v151.5c0%2011.1%202.9%2022.1%208.4%2031.8L306%20320H142l41.6-72.7c5.5-9.7%208.4-20.6%208.4-31.8%22/%3E%3C/svg%3E');}</style>
44
44
 
45
45
 
46
46
 
@@ -222,7 +222,7 @@
222
222
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
223
223
  <div class="md-source__icon md-icon">
224
224
 
225
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
225
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
226
226
  </div>
227
227
  <div class="md-source__repository">
228
228
  GitHub
@@ -394,7 +394,7 @@
394
394
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
395
395
  <div class="md-source__icon md-icon">
396
396
 
397
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
397
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
398
398
  </div>
399
399
  <div class="md-source__repository">
400
400
  GitHub
@@ -8267,6 +8267,48 @@
8267
8267
  </label>
8268
8268
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
8269
8269
 
8270
+ <li class="md-nav__item">
8271
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs" class="md-nav__link">
8272
+ <span class="md-ellipsis">
8273
+ AncestorsBreadcrumbs
8274
+ </span>
8275
+ </a>
8276
+
8277
+ <nav class="md-nav" aria-label="AncestorsBreadcrumbs">
8278
+ <ul class="md-nav__list">
8279
+
8280
+ <li class="md-nav__item">
8281
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_ancestors_items" class="md-nav__link">
8282
+ <span class="md-ellipsis">
8283
+ get_ancestors_items
8284
+ </span>
8285
+ </a>
8286
+
8287
+ </li>
8288
+
8289
+ <li class="md-nav__item">
8290
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_detail_items" class="md-nav__link">
8291
+ <span class="md-ellipsis">
8292
+ get_detail_items
8293
+ </span>
8294
+ </a>
8295
+
8296
+ </li>
8297
+
8298
+ <li class="md-nav__item">
8299
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_items_for_action" class="md-nav__link">
8300
+ <span class="md-ellipsis">
8301
+ get_items_for_action
8302
+ </span>
8303
+ </a>
8304
+
8305
+ </li>
8306
+
8307
+ </ul>
8308
+ </nav>
8309
+
8310
+ </li>
8311
+
8270
8312
  <li class="md-nav__item">
8271
8313
  <a href="#nautobot.apps.ui.Banner" class="md-nav__link">
8272
8314
  <span class="md-ellipsis">
@@ -8500,15 +8542,6 @@
8500
8542
  </span>
8501
8543
  </a>
8502
8544
 
8503
- </li>
8504
-
8505
- <li class="md-nav__item">
8506
- <a href="#nautobot.apps.ui.Button.should_render" class="md-nav__link">
8507
- <span class="md-ellipsis">
8508
- should_render
8509
- </span>
8510
- </a>
8511
-
8512
8545
  </li>
8513
8546
 
8514
8547
  </ul>
@@ -8607,6 +8640,21 @@
8607
8640
  </span>
8608
8641
  </a>
8609
8642
 
8643
+ <nav class="md-nav" aria-label="DistinctViewTab">
8644
+ <ul class="md-nav__list">
8645
+
8646
+ <li class="md-nav__item">
8647
+ <a href="#nautobot.apps.ui.DistinctViewTab.should_render_content" class="md-nav__link">
8648
+ <span class="md-ellipsis">
8649
+ should_render_content
8650
+ </span>
8651
+ </a>
8652
+
8653
+ </li>
8654
+
8655
+ </ul>
8656
+ </nav>
8657
+
8610
8658
  </li>
8611
8659
 
8612
8660
  <li class="md-nav__item">
@@ -8796,6 +8844,48 @@
8796
8844
  </ul>
8797
8845
  </nav>
8798
8846
 
8847
+ </li>
8848
+
8849
+ <li class="md-nav__item">
8850
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem" class="md-nav__link">
8851
+ <span class="md-ellipsis">
8852
+ InstanceParentBreadcrumbItem
8853
+ </span>
8854
+ </a>
8855
+
8856
+ <nav class="md-nav" aria-label="InstanceParentBreadcrumbItem">
8857
+ <ul class="md-nav__list">
8858
+
8859
+ <li class="md-nav__item">
8860
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.__post_init__" class="md-nav__link">
8861
+ <span class="md-ellipsis">
8862
+ __post_init__
8863
+ </span>
8864
+ </a>
8865
+
8866
+ </li>
8867
+
8868
+ <li class="md-nav__item">
8869
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.get_label" class="md-nav__link">
8870
+ <span class="md-ellipsis">
8871
+ get_label
8872
+ </span>
8873
+ </a>
8874
+
8875
+ </li>
8876
+
8877
+ <li class="md-nav__item">
8878
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.get_url" class="md-nav__link">
8879
+ <span class="md-ellipsis">
8880
+ get_url
8881
+ </span>
8882
+ </a>
8883
+
8884
+ </li>
8885
+
8886
+ </ul>
8887
+ </nav>
8888
+
8799
8889
  </li>
8800
8890
 
8801
8891
  <li class="md-nav__item">
@@ -9499,6 +9589,15 @@
9499
9589
  </span>
9500
9590
  </a>
9501
9591
 
9592
+ </li>
9593
+
9594
+ <li class="md-nav__item">
9595
+ <a href="#nautobot.apps.ui.Tab.should_render_content" class="md-nav__link">
9596
+ <span class="md-ellipsis">
9597
+ should_render_content
9598
+ </span>
9599
+ </a>
9600
+
9502
9601
  </li>
9503
9602
 
9504
9603
  </ul>
@@ -9720,6 +9819,15 @@
9720
9819
  </ul>
9721
9820
  </nav>
9722
9821
 
9822
+ </li>
9823
+
9824
+ <li class="md-nav__item">
9825
+ <a href="#nautobot.apps.ui.context_object_attr" class="md-nav__link">
9826
+ <span class="md-ellipsis">
9827
+ context_object_attr
9828
+ </span>
9829
+ </a>
9830
+
9723
9831
  </li>
9724
9832
 
9725
9833
  <li class="md-nav__item">
@@ -11586,6 +11694,48 @@
11586
11694
  </label>
11587
11695
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
11588
11696
 
11697
+ <li class="md-nav__item">
11698
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs" class="md-nav__link">
11699
+ <span class="md-ellipsis">
11700
+ AncestorsBreadcrumbs
11701
+ </span>
11702
+ </a>
11703
+
11704
+ <nav class="md-nav" aria-label="AncestorsBreadcrumbs">
11705
+ <ul class="md-nav__list">
11706
+
11707
+ <li class="md-nav__item">
11708
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_ancestors_items" class="md-nav__link">
11709
+ <span class="md-ellipsis">
11710
+ get_ancestors_items
11711
+ </span>
11712
+ </a>
11713
+
11714
+ </li>
11715
+
11716
+ <li class="md-nav__item">
11717
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_detail_items" class="md-nav__link">
11718
+ <span class="md-ellipsis">
11719
+ get_detail_items
11720
+ </span>
11721
+ </a>
11722
+
11723
+ </li>
11724
+
11725
+ <li class="md-nav__item">
11726
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_items_for_action" class="md-nav__link">
11727
+ <span class="md-ellipsis">
11728
+ get_items_for_action
11729
+ </span>
11730
+ </a>
11731
+
11732
+ </li>
11733
+
11734
+ </ul>
11735
+ </nav>
11736
+
11737
+ </li>
11738
+
11589
11739
  <li class="md-nav__item">
11590
11740
  <a href="#nautobot.apps.ui.Banner" class="md-nav__link">
11591
11741
  <span class="md-ellipsis">
@@ -11819,15 +11969,6 @@
11819
11969
  </span>
11820
11970
  </a>
11821
11971
 
11822
- </li>
11823
-
11824
- <li class="md-nav__item">
11825
- <a href="#nautobot.apps.ui.Button.should_render" class="md-nav__link">
11826
- <span class="md-ellipsis">
11827
- should_render
11828
- </span>
11829
- </a>
11830
-
11831
11972
  </li>
11832
11973
 
11833
11974
  </ul>
@@ -11926,6 +12067,21 @@
11926
12067
  </span>
11927
12068
  </a>
11928
12069
 
12070
+ <nav class="md-nav" aria-label="DistinctViewTab">
12071
+ <ul class="md-nav__list">
12072
+
12073
+ <li class="md-nav__item">
12074
+ <a href="#nautobot.apps.ui.DistinctViewTab.should_render_content" class="md-nav__link">
12075
+ <span class="md-ellipsis">
12076
+ should_render_content
12077
+ </span>
12078
+ </a>
12079
+
12080
+ </li>
12081
+
12082
+ </ul>
12083
+ </nav>
12084
+
11929
12085
  </li>
11930
12086
 
11931
12087
  <li class="md-nav__item">
@@ -12115,6 +12271,48 @@
12115
12271
  </ul>
12116
12272
  </nav>
12117
12273
 
12274
+ </li>
12275
+
12276
+ <li class="md-nav__item">
12277
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem" class="md-nav__link">
12278
+ <span class="md-ellipsis">
12279
+ InstanceParentBreadcrumbItem
12280
+ </span>
12281
+ </a>
12282
+
12283
+ <nav class="md-nav" aria-label="InstanceParentBreadcrumbItem">
12284
+ <ul class="md-nav__list">
12285
+
12286
+ <li class="md-nav__item">
12287
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.__post_init__" class="md-nav__link">
12288
+ <span class="md-ellipsis">
12289
+ __post_init__
12290
+ </span>
12291
+ </a>
12292
+
12293
+ </li>
12294
+
12295
+ <li class="md-nav__item">
12296
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.get_label" class="md-nav__link">
12297
+ <span class="md-ellipsis">
12298
+ get_label
12299
+ </span>
12300
+ </a>
12301
+
12302
+ </li>
12303
+
12304
+ <li class="md-nav__item">
12305
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.get_url" class="md-nav__link">
12306
+ <span class="md-ellipsis">
12307
+ get_url
12308
+ </span>
12309
+ </a>
12310
+
12311
+ </li>
12312
+
12313
+ </ul>
12314
+ </nav>
12315
+
12118
12316
  </li>
12119
12317
 
12120
12318
  <li class="md-nav__item">
@@ -12818,6 +13016,15 @@
12818
13016
  </span>
12819
13017
  </a>
12820
13018
 
13019
+ </li>
13020
+
13021
+ <li class="md-nav__item">
13022
+ <a href="#nautobot.apps.ui.Tab.should_render_content" class="md-nav__link">
13023
+ <span class="md-ellipsis">
13024
+ should_render_content
13025
+ </span>
13026
+ </a>
13027
+
12821
13028
  </li>
12822
13029
 
12823
13030
  </ul>
@@ -13039,6 +13246,15 @@
13039
13246
  </ul>
13040
13247
  </nav>
13041
13248
 
13249
+ </li>
13250
+
13251
+ <li class="md-nav__item">
13252
+ <a href="#nautobot.apps.ui.context_object_attr" class="md-nav__link">
13253
+ <span class="md-ellipsis">
13254
+ context_object_attr
13255
+ </span>
13256
+ </a>
13257
+
13042
13258
  </li>
13043
13259
 
13044
13260
  <li class="md-nav__item">
@@ -13104,17 +13320,23 @@
13104
13320
 
13105
13321
 
13106
13322
 
13107
- <h2 id="nautobot.apps.ui.Banner" class="doc doc-heading">
13108
- <code>nautobot.apps.ui.Banner</code>
13323
+ <h2 id="nautobot.apps.ui.AncestorsBreadcrumbs" class="doc doc-heading">
13324
+ <code>nautobot.apps.ui.AncestorsBreadcrumbs</code>
13109
13325
 
13110
13326
 
13111
- <a href="#nautobot.apps.ui.Banner" class="headerlink" title="Permanent link">&para;</a></h2>
13327
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs" class="headerlink" title="Permanent link">&para;</a></h2>
13112
13328
 
13113
13329
 
13114
13330
  <div class="doc doc-contents ">
13331
+ <p class="doc doc-class-bases">
13332
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Breadcrumbs (nautobot.core.ui.breadcrumbs.Breadcrumbs)" href="#nautobot.apps.ui.Breadcrumbs">Breadcrumbs</a></code></p>
13115
13333
 
13116
13334
 
13117
- <p>Class that may be returned by a registered plugin_banners function.</p>
13335
+ <p>Breadcrumbs class which can render list of ancestors of given instance.</p>
13336
+ <p>Default behavior:
13337
+ - render breadcrumb item with link to the list view
13338
+ - dynamically add list of <code>InstanceBreadcrumbItem</code> from <code>ancestors()</code>
13339
+ - adds standard breadcrumb item with link to the details</p>
13118
13340
 
13119
13341
 
13120
13342
 
@@ -13135,120 +13357,72 @@
13135
13357
 
13136
13358
 
13137
13359
 
13360
+ <div class="doc doc-object doc-function">
13138
13361
 
13139
13362
 
13140
- </div>
13141
-
13142
- </div>
13143
-
13144
- </div>
13145
-
13146
- <div class="doc doc-object doc-class">
13147
-
13148
-
13149
-
13150
- <h2 id="nautobot.apps.ui.BannerClassChoices" class="doc doc-heading">
13151
- <code>nautobot.apps.ui.BannerClassChoices</code>
13152
-
13363
+ <h3 id="nautobot.apps.ui.AncestorsBreadcrumbs.get_ancestors_items" class="doc doc-heading">
13364
+ <code class="highlight language-python"><span class="n">get_ancestors_items</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span></code>
13153
13365
 
13154
- <a href="#nautobot.apps.ui.BannerClassChoices" class="headerlink" title="Permanent link">&para;</a></h2>
13366
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_ancestors_items" class="headerlink" title="Permanent link">&para;</a></h3>
13155
13367
 
13156
13368
 
13157
13369
  <div class="doc doc-contents ">
13158
- <p class="doc doc-class-bases">
13159
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.choices.ChoiceSet (nautobot.core.choices.ChoiceSet)" href="choices.html#nautobot.apps.choices.ChoiceSet">ChoiceSet</a></code></p>
13160
13370
 
13161
-
13162
- <p>Styling choices for custom banners.</p>
13371
+ <p>Create breadcrumb items for all ancestor objects of the given instance.</p>
13163
13372
 
13164
13373
 
13374
+ <p><span class="doc-section-title">Parameters:</span></p>
13375
+ <table>
13376
+ <thead>
13377
+ <tr>
13378
+ <th>Name</th>
13379
+ <th>Type</th>
13380
+ <th>Description</th>
13381
+ <th>Default</th>
13382
+ </tr>
13383
+ </thead>
13384
+ <tbody>
13385
+ <tr class="doc-section-item">
13386
+ <td>
13387
+ <code>instance</code>
13388
+ </td>
13389
+ <td>
13390
+ <code><a class="autorefs autorefs-internal" title="nautobot.apps.models.TreeModel (nautobot.core.models.tree_queries.TreeModel)" href="models.html#nautobot.apps.models.TreeModel">TreeModel</a></code>
13391
+ </td>
13392
+ <td>
13393
+ <div class="doc-md-description">
13394
+ <p>Object from context.</p>
13395
+ </div>
13396
+ </td>
13397
+ <td>
13398
+ <em>required</em>
13399
+ </td>
13400
+ </tr>
13401
+ </tbody>
13402
+ </table>
13165
13403
 
13166
13404
 
13167
-
13168
-
13169
-
13170
-
13171
-
13172
-
13173
- <div class="doc doc-children">
13174
-
13175
-
13176
-
13177
-
13178
-
13179
-
13180
-
13181
-
13182
-
13183
-
13184
-
13185
- </div>
13186
-
13187
- </div>
13188
-
13189
- </div>
13190
-
13191
- <div class="doc doc-object doc-class">
13192
-
13193
-
13194
-
13195
- <h2 id="nautobot.apps.ui.BaseBreadcrumbItem" class="doc doc-heading">
13196
- <code>nautobot.apps.ui.BaseBreadcrumbItem</code>
13197
-
13198
-
13199
- <span class="doc doc-labels">
13200
- <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
13201
- </span>
13202
-
13203
- <a href="#nautobot.apps.ui.BaseBreadcrumbItem" class="headerlink" title="Permanent link">&para;</a></h2>
13204
-
13205
-
13206
- <div class="doc doc-contents ">
13207
-
13208
-
13209
- <p>Base interface for breadcrumb items.</p>
13210
-
13211
-
13212
- <p><span class="doc-section-title">Attributes:</span></p>
13405
+ <p><span class="doc-section-title">Returns:</span></p>
13213
13406
  <table>
13214
13407
  <thead>
13215
13408
  <tr>
13216
- <th>Name</th>
13217
13409
  <th>Type</th>
13218
13410
  <th>Description</th>
13219
13411
  </tr>
13220
13412
  </thead>
13221
13413
  <tbody>
13222
13414
  <tr class="doc-section-item">
13223
- <td><code><span title="nautobot.apps.ui.BaseBreadcrumbItem.should_render">should_render</span></code></td>
13224
- <td>
13225
- <code><span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="bool">bool</span>]</code>
13226
- </td>
13227
- <td>
13228
- <div class="doc-md-description">
13229
- <p>Callable to decide whether this item should be rendered or not.</p>
13230
- </div>
13231
- </td>
13232
- </tr>
13233
- <tr class="doc-section-item">
13234
- <td><code><span title="nautobot.apps.ui.BaseBreadcrumbItem.label">label</span></code></td>
13235
- <td>
13236
- <code><span title="typing.Union">Union</span>[<span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="str">str</span>], <span title="nautobot.core.ui.breadcrumbs.WithStr">WithStr</span>, None]</code>
13237
- </td>
13238
- <td>
13239
- <div class="doc-md-description">
13240
- <p>Optional override for the display label in the breadcrumb.</p>
13241
- </div>
13242
- </td>
13243
- </tr>
13244
- <tr class="doc-section-item">
13245
- <td><code><span title="nautobot.apps.ui.BaseBreadcrumbItem.label_key">label_key</span></code></td>
13246
13415
  <td>
13247
- <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
13416
+ <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
13417
+
13418
+
13419
+
13420
+ dataclass
13421
+ (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a>]</code>
13248
13422
  </td>
13249
13423
  <td>
13250
13424
  <div class="doc-md-description">
13251
- <p>Optional key to take label from the context.</p>
13425
+ <p>list[BaseBreadcrumbItem]: Breadcrumb items for each ancestor of the instance.</p>
13252
13426
  </div>
13253
13427
  </td>
13254
13428
  </tr>
@@ -13256,37 +13430,22 @@
13256
13430
  </table>
13257
13431
 
13258
13432
 
13433
+ </div>
13259
13434
 
13260
-
13261
-
13262
-
13263
-
13264
-
13265
-
13266
-
13267
- <div class="doc doc-children">
13268
-
13269
-
13270
-
13271
-
13272
-
13273
-
13274
-
13275
-
13435
+ </div>
13276
13436
 
13277
13437
  <div class="doc doc-object doc-function">
13278
13438
 
13279
13439
 
13280
- <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.as_pair" class="doc doc-heading">
13281
- <code class="highlight language-python"><span class="n">as_pair</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
13440
+ <h3 id="nautobot.apps.ui.AncestorsBreadcrumbs.get_detail_items" class="doc doc-heading">
13441
+ <code class="highlight language-python"><span class="n">get_detail_items</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
13282
13442
 
13283
- <a href="#nautobot.apps.ui.BaseBreadcrumbItem.as_pair" class="headerlink" title="Permanent link">&para;</a></h3>
13443
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_detail_items" class="headerlink" title="Permanent link">&para;</a></h3>
13284
13444
 
13285
13445
 
13286
13446
  <div class="doc doc-contents ">
13287
13447
 
13288
- <p>Construct the (URL, label) pair for the breadcrumb.</p>
13289
- <p>Combines <code>get_url()</code> and <code>get_label()</code> and applies title casing to the label.</p>
13448
+ <p>Build breadcrumb items for a detail view, including the model, its ancestors, and the instance itself.</p>
13290
13449
 
13291
13450
 
13292
13451
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -13309,7 +13468,7 @@
13309
13468
  </td>
13310
13469
  <td>
13311
13470
  <div class="doc-md-description">
13312
- <p>Context object used to resolve the breadcrumb parts.</p>
13471
+ <p>Template or view context containing the current object.</p>
13313
13472
  </div>
13314
13473
  </td>
13315
13474
  <td>
@@ -13331,21 +13490,16 @@
13331
13490
  <tbody>
13332
13491
  <tr class="doc-section-item">
13333
13492
  <td>
13334
- <code><span title="str">str</span></code>
13335
- </td>
13336
- <td>
13337
- <div class="doc-md-description">
13338
- <p>tuple[str, Optional[str]]: A tuple of (URL, label), where URL may be an empty string</p>
13339
- </div>
13340
- </td>
13341
- </tr>
13342
- <tr class="doc-section-item">
13343
- <td>
13344
- <code><span title="str">str</span></code>
13493
+ <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
13494
+
13495
+
13496
+
13497
+ dataclass
13498
+ (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a>]</code>
13345
13499
  </td>
13346
13500
  <td>
13347
13501
  <div class="doc-md-description">
13348
- <p>if unresolved, and label is title-cased.</p>
13502
+ <p>list[BaseBreadcrumbItem]: Ordered breadcrumb items for the given instance.</p>
13349
13503
  </div>
13350
13504
  </td>
13351
13505
  </tr>
@@ -13360,15 +13514,16 @@
13360
13514
  <div class="doc doc-object doc-function">
13361
13515
 
13362
13516
 
13363
- <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.get_label" class="doc doc-heading">
13364
- <code class="highlight language-python"><span class="n">get_label</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
13517
+ <h3 id="nautobot.apps.ui.AncestorsBreadcrumbs.get_items_for_action" class="doc doc-heading">
13518
+ <code class="highlight language-python"><span class="n">get_items_for_action</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">detail</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></code>
13365
13519
 
13366
- <a href="#nautobot.apps.ui.BaseBreadcrumbItem.get_label" class="headerlink" title="Permanent link">&para;</a></h3>
13520
+ <a href="#nautobot.apps.ui.AncestorsBreadcrumbs.get_items_for_action" class="headerlink" title="Permanent link">&para;</a></h3>
13367
13521
 
13368
13522
 
13369
13523
  <div class="doc doc-contents ">
13370
13524
 
13371
- <p>Get the label (display text) for the breadcrumb.</p>
13525
+ <p>Get the breadcrumb items for a specific action, 'detail' or to asterisk (*) if present.</p>
13526
+ <p>For detail action it calls <code>self.get_detail_items()</code> method. For other actions, it calls parent class method.</p>
13372
13527
 
13373
13528
 
13374
13529
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -13384,76 +13539,52 @@
13384
13539
  <tbody>
13385
13540
  <tr class="doc-section-item">
13386
13541
  <td>
13387
- <code>context</code>
13542
+ <code>items</code>
13388
13543
  </td>
13389
13544
  <td>
13390
- <code><span title="django.template.Context">Context</span></code>
13545
+ <code><span title="nautobot.core.ui.breadcrumbs.BreadcrumbItemsType">BreadcrumbItemsType</span></code>
13391
13546
  </td>
13392
13547
  <td>
13393
13548
  <div class="doc-md-description">
13394
- <p>The current template context.</p>
13549
+ <p>Dictionary mapping action names to breadcrumb item lists.</p>
13395
13550
  </div>
13396
13551
  </td>
13397
13552
  <td>
13398
13553
  <em>required</em>
13399
13554
  </td>
13400
13555
  </tr>
13401
- </tbody>
13402
- </table>
13403
-
13404
-
13405
- <p><span class="doc-section-title">Returns:</span></p>
13406
- <table>
13407
- <thead>
13408
- <tr>
13409
- <th>Name</th> <th>Type</th>
13410
- <th>Description</th>
13411
- </tr>
13412
- </thead>
13413
- <tbody>
13414
13556
  <tr class="doc-section-item">
13415
- <td><code>str</code></td> <td>
13557
+ <td>
13558
+ <code>action</code>
13559
+ </td>
13560
+ <td>
13416
13561
  <code><span title="str">str</span></code>
13417
13562
  </td>
13418
13563
  <td>
13419
13564
  <div class="doc-md-description">
13420
- <p>Label as a string.</p>
13565
+ <p>Current action name (e.g., "list", "detail").</p>
13421
13566
  </div>
13422
13567
  </td>
13568
+ <td>
13569
+ <em>required</em>
13570
+ </td>
13571
+ </tr>
13572
+ <tr class="doc-section-item">
13573
+ <td>
13574
+ <code>detail</code>
13575
+ </td>
13576
+ <td>
13577
+ <code><span title="bool">bool</span></code>
13578
+ </td>
13579
+ <td>
13580
+ <div class="doc-md-description">
13581
+ <p>Whether this is a detail view (for fallback).</p>
13582
+ </div>
13583
+ </td>
13584
+ <td>
13585
+ <em>required</em>
13586
+ </td>
13423
13587
  </tr>
13424
- </tbody>
13425
- </table>
13426
-
13427
-
13428
- </div>
13429
-
13430
- </div>
13431
-
13432
- <div class="doc doc-object doc-function">
13433
-
13434
-
13435
- <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.get_url" class="doc doc-heading">
13436
- <code class="highlight language-python"><span class="n">get_url</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
13437
-
13438
- <a href="#nautobot.apps.ui.BaseBreadcrumbItem.get_url" class="headerlink" title="Permanent link">&para;</a></h3>
13439
-
13440
-
13441
- <div class="doc doc-contents ">
13442
-
13443
- <p>Get the URL for the breadcrumb item.</p>
13444
-
13445
-
13446
- <p><span class="doc-section-title">Parameters:</span></p>
13447
- <table>
13448
- <thead>
13449
- <tr>
13450
- <th>Name</th>
13451
- <th>Type</th>
13452
- <th>Description</th>
13453
- <th>Default</th>
13454
- </tr>
13455
- </thead>
13456
- <tbody>
13457
13588
  <tr class="doc-section-item">
13458
13589
  <td>
13459
13590
  <code>context</code>
@@ -13463,7 +13594,7 @@
13463
13594
  </td>
13464
13595
  <td>
13465
13596
  <div class="doc-md-description">
13466
- <p>The current template context.</p>
13597
+ <p>The view or template context.</p>
13467
13598
  </div>
13468
13599
  </td>
13469
13600
  <td>
@@ -13485,11 +13616,16 @@
13485
13616
  <tbody>
13486
13617
  <tr class="doc-section-item">
13487
13618
  <td>
13488
- <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
13619
+ <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
13620
+
13621
+
13622
+
13623
+ dataclass
13624
+ (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a>]</code>
13489
13625
  </td>
13490
13626
  <td>
13491
13627
  <div class="doc-md-description">
13492
- <p>Optional[str]: The URL as a string, or None.</p>
13628
+ <p>list[BaseBreadcrumbItem]: List of breadcrumb items for the action.</p>
13493
13629
  </div>
13494
13630
  </td>
13495
13631
  </tr>
@@ -13501,217 +13637,48 @@
13501
13637
 
13502
13638
  </div>
13503
13639
 
13504
- <div class="doc doc-object doc-function">
13505
13640
 
13506
13641
 
13507
- <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.resolve_reverse_params" class="doc doc-heading">
13508
- <code class="highlight language-python"><span class="n">resolve_reverse_params</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></code>
13642
+ </div>
13509
13643
 
13510
- <span class="doc doc-labels">
13511
- <small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
13512
- </span>
13644
+ </div>
13513
13645
 
13514
- <a href="#nautobot.apps.ui.BaseBreadcrumbItem.resolve_reverse_params" class="headerlink" title="Permanent link">&para;</a></h3>
13646
+ </div>
13647
+
13648
+ <div class="doc doc-object doc-class">
13649
+
13650
+
13651
+
13652
+ <h2 id="nautobot.apps.ui.Banner" class="doc doc-heading">
13653
+ <code>nautobot.apps.ui.Banner</code>
13654
+
13655
+
13656
+ <a href="#nautobot.apps.ui.Banner" class="headerlink" title="Permanent link">&para;</a></h2>
13515
13657
 
13516
13658
 
13517
13659
  <div class="doc doc-contents ">
13518
13660
 
13519
- <p>Resolves parameters for URL reversing, calling if callable, or returning as-is.</p>
13520
13661
 
13662
+ <p>Class that may be returned by a registered plugin_banners function.</p>
13521
13663
 
13522
- <p><span class="doc-section-title">Parameters:</span></p>
13523
- <table>
13524
- <thead>
13525
- <tr>
13526
- <th>Name</th>
13527
- <th>Type</th>
13528
- <th>Description</th>
13529
- <th>Default</th>
13530
- </tr>
13531
- </thead>
13532
- <tbody>
13533
- <tr class="doc-section-item">
13534
- <td>
13535
- <code>params</code>
13536
- </td>
13537
- <td>
13538
- <code><span title="nautobot.core.ui.breadcrumbs.ReverseParams">ReverseParams</span></code>
13539
- </td>
13540
- <td>
13541
- <div class="doc-md-description">
13542
- <p>Dict or callable to resolve.</p>
13543
- </div>
13544
- </td>
13545
- <td>
13546
- <em>required</em>
13547
- </td>
13548
- </tr>
13549
- <tr class="doc-section-item">
13550
- <td>
13551
- <code>context</code>
13552
- </td>
13553
- <td>
13554
- <code><span title="django.template.Context">Context</span></code>
13555
- </td>
13556
- <td>
13557
- <div class="doc-md-description">
13558
- <p>Context for callables.</p>
13559
- </div>
13560
- </td>
13561
- <td>
13562
- <em>required</em>
13563
- </td>
13564
- </tr>
13565
- </tbody>
13566
- </table>
13567
-
13568
-
13569
- <p><span class="doc-section-title">Returns:</span></p>
13570
- <table>
13571
- <thead>
13572
- <tr>
13573
- <th>Type</th>
13574
- <th>Description</th>
13575
- </tr>
13576
- </thead>
13577
- <tbody>
13578
- <tr class="doc-section-item">
13579
- <td>
13580
- <code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
13581
- </td>
13582
- <td>
13583
- <div class="doc-md-description">
13584
- <p>dict[str, Any]: Dictionary of parameters for URL reversing.</p>
13585
- </div>
13586
- </td>
13587
- </tr>
13588
- </tbody>
13589
- </table>
13590
13664
 
13591
13665
 
13592
- </div>
13593
13666
 
13594
- </div>
13595
13667
 
13596
- <div class="doc doc-object doc-function">
13597
13668
 
13598
13669
 
13599
- <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.reverse_view_name" class="doc doc-heading">
13600
- <code class="highlight language-python"><span class="n">reverse_view_name</span><span class="p">(</span><span class="n">view_name</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">reverse_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">reverse_query_params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
13601
13670
 
13602
- <a href="#nautobot.apps.ui.BaseBreadcrumbItem.reverse_view_name" class="headerlink" title="Permanent link">&para;</a></h3>
13603
13671
 
13604
13672
 
13605
- <div class="doc doc-contents ">
13673
+ <div class="doc doc-children">
13606
13674
 
13607
- <p>Reverse a Django view name into a URL, optionally adding query parameters.</p>
13608
13675
 
13609
13676
 
13610
- <p><span class="doc-section-title">Parameters:</span></p>
13611
- <table>
13612
- <thead>
13613
- <tr>
13614
- <th>Name</th>
13615
- <th>Type</th>
13616
- <th>Description</th>
13617
- <th>Default</th>
13618
- </tr>
13619
- </thead>
13620
- <tbody>
13621
- <tr class="doc-section-item">
13622
- <td>
13623
- <code>view_name</code>
13624
- </td>
13625
- <td>
13626
- <code><span title="str">str</span></code>
13627
- </td>
13628
- <td>
13629
- <div class="doc-md-description">
13630
- <p>Django view name to reverse.</p>
13631
- </div>
13632
- </td>
13633
- <td>
13634
- <em>required</em>
13635
- </td>
13636
- </tr>
13637
- <tr class="doc-section-item">
13638
- <td>
13639
- <code>context</code>
13640
- </td>
13641
- <td>
13642
- <code><span title="django.template.Context">Context</span></code>
13643
- </td>
13644
- <td>
13645
- <div class="doc-md-description">
13646
- <p>Template context, used to resolve params if needed.</p>
13647
- </div>
13648
- </td>
13649
- <td>
13650
- <em>required</em>
13651
- </td>
13652
- </tr>
13653
- <tr class="doc-section-item">
13654
- <td>
13655
- <code>reverse_kwargs</code>
13656
- </td>
13657
- <td>
13658
- <code><span title="nautobot.core.ui.breadcrumbs.ReverseParams">ReverseParams</span></code>
13659
- </td>
13660
- <td>
13661
- <div class="doc-md-description">
13662
- <p>URL kwargs for reversing.</p>
13663
- </div>
13664
- </td>
13665
- <td>
13666
- <code>None</code>
13667
- </td>
13668
- </tr>
13669
- <tr class="doc-section-item">
13670
- <td>
13671
- <code>reverse_query_params</code>
13672
- </td>
13673
- <td>
13674
- <code><span title="nautobot.core.ui.breadcrumbs.ReverseParams">ReverseParams</span></code>
13675
- </td>
13676
- <td>
13677
- <div class="doc-md-description">
13678
- <p>Query parameters to append.</p>
13679
- </div>
13680
- </td>
13681
- <td>
13682
- <code>None</code>
13683
- </td>
13684
- </tr>
13685
- </tbody>
13686
- </table>
13687
13677
 
13688
13678
 
13689
- <p><span class="doc-section-title">Returns:</span></p>
13690
- <table>
13691
- <thead>
13692
- <tr>
13693
- <th>Type</th>
13694
- <th>Description</th>
13695
- </tr>
13696
- </thead>
13697
- <tbody>
13698
- <tr class="doc-section-item">
13699
- <td>
13700
- <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
13701
- </td>
13702
- <td>
13703
- <div class="doc-md-description">
13704
- <p>Optional[str]: The resolved URL as a string, or None if reversing fails.</p>
13705
- </div>
13706
- </td>
13707
- </tr>
13708
- </tbody>
13709
- </table>
13710
13679
 
13711
13680
 
13712
- </div>
13713
13681
 
13714
- </div>
13715
13682
 
13716
13683
 
13717
13684
 
@@ -13725,19 +13692,19 @@
13725
13692
 
13726
13693
 
13727
13694
 
13728
- <h2 id="nautobot.apps.ui.BaseTextPanel" class="doc doc-heading">
13729
- <code>nautobot.apps.ui.BaseTextPanel</code>
13695
+ <h2 id="nautobot.apps.ui.BannerClassChoices" class="doc doc-heading">
13696
+ <code>nautobot.apps.ui.BannerClassChoices</code>
13730
13697
 
13731
13698
 
13732
- <a href="#nautobot.apps.ui.BaseTextPanel" class="headerlink" title="Permanent link">&para;</a></h2>
13699
+ <a href="#nautobot.apps.ui.BannerClassChoices" class="headerlink" title="Permanent link">&para;</a></h2>
13733
13700
 
13734
13701
 
13735
13702
  <div class="doc doc-contents ">
13736
13703
  <p class="doc doc-class-bases">
13737
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Panel (nautobot.core.ui.object_detail.Panel)" href="#nautobot.apps.ui.Panel">Panel</a></code></p>
13704
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.choices.ChoiceSet (nautobot.core.choices.ChoiceSet)" href="choices.html#nautobot.apps.choices.ChoiceSet">ChoiceSet</a></code></p>
13738
13705
 
13739
13706
 
13740
- <p>A panel that renders a single value as text, Markdown, JSON, or YAML.</p>
13707
+ <p>Styling choices for custom banners.</p>
13741
13708
 
13742
13709
 
13743
13710
 
@@ -13757,23 +13724,34 @@
13757
13724
 
13758
13725
 
13759
13726
 
13727
+
13728
+
13729
+
13730
+ </div>
13731
+
13732
+ </div>
13733
+
13734
+ </div>
13735
+
13760
13736
  <div class="doc doc-object doc-class">
13761
13737
 
13762
13738
 
13763
13739
 
13764
- <h3 id="nautobot.apps.ui.BaseTextPanel.RenderOptions" class="doc doc-heading">
13765
- <code>RenderOptions</code>
13740
+ <h2 id="nautobot.apps.ui.BaseBreadcrumbItem" class="doc doc-heading">
13741
+ <code>nautobot.apps.ui.BaseBreadcrumbItem</code>
13766
13742
 
13767
13743
 
13768
- <a href="#nautobot.apps.ui.BaseTextPanel.RenderOptions" class="headerlink" title="Permanent link">&para;</a></h3>
13744
+ <span class="doc doc-labels">
13745
+ <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
13746
+ </span>
13747
+
13748
+ <a href="#nautobot.apps.ui.BaseBreadcrumbItem" class="headerlink" title="Permanent link">&para;</a></h2>
13769
13749
 
13770
13750
 
13771
13751
  <div class="doc doc-contents ">
13772
- <p class="doc doc-class-bases">
13773
- Bases: <code><span title="enum.Enum">Enum</span></code></p>
13774
13752
 
13775
13753
 
13776
- <p>Options available for text panels for different type of rendering a given input.</p>
13754
+ <p>Base interface for breadcrumb items.</p>
13777
13755
 
13778
13756
 
13779
13757
  <p><span class="doc-section-title">Attributes:</span></p>
@@ -13787,57 +13765,35 @@
13787
13765
  </thead>
13788
13766
  <tbody>
13789
13767
  <tr class="doc-section-item">
13790
- <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.PLAINTEXT">PLAINTEXT</span></code></td>
13791
- <td>
13792
- <code><span title="str">str</span></code>
13793
- </td>
13794
- <td>
13795
- <div class="doc-md-description">
13796
- <p>Plain text format (value: "plaintext").</p>
13797
- </div>
13798
- </td>
13799
- </tr>
13800
- <tr class="doc-section-item">
13801
- <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.JSON">JSON</span></code></td>
13802
- <td>
13803
- <code><span title="str">str</span></code>
13804
- </td>
13805
- <td>
13806
- <div class="doc-md-description">
13807
- <p>Dict will be dumped into JSON and pretty-formatted (value: "json").</p>
13808
- </div>
13809
- </td>
13810
- </tr>
13811
- <tr class="doc-section-item">
13812
- <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.YAML">YAML</span></code></td>
13768
+ <td><code><span title="nautobot.apps.ui.BaseBreadcrumbItem.should_render">should_render</span></code></td>
13813
13769
  <td>
13814
- <code><span title="str">str</span></code>
13770
+ <code><span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="bool">bool</span>]</code>
13815
13771
  </td>
13816
13772
  <td>
13817
13773
  <div class="doc-md-description">
13818
- <p>Dict will be displayed as pretty-formatted yaml (value: "yaml")</p>
13774
+ <p>Callable to decide whether this item should be rendered or not.</p>
13819
13775
  </div>
13820
13776
  </td>
13821
13777
  </tr>
13822
13778
  <tr class="doc-section-item">
13823
- <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.MARKDOWN">MARKDOWN</span></code></td>
13779
+ <td><code><span title="nautobot.apps.ui.BaseBreadcrumbItem.label">label</span></code></td>
13824
13780
  <td>
13825
- <code><span title="str">str</span></code>
13781
+ <code><span title="typing.Union">Union</span>[<span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="str">str</span>], <span title="nautobot.core.ui.breadcrumbs.WithStr">WithStr</span>, None]</code>
13826
13782
  </td>
13827
13783
  <td>
13828
13784
  <div class="doc-md-description">
13829
- <p>Markdown format (value: "markdown").</p>
13785
+ <p>Optional override for the display label in the breadcrumb.</p>
13830
13786
  </div>
13831
13787
  </td>
13832
13788
  </tr>
13833
13789
  <tr class="doc-section-item">
13834
- <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.CODE">CODE</span></code></td>
13790
+ <td><code><span title="nautobot.apps.ui.BaseBreadcrumbItem.label_key">label_key</span></code></td>
13835
13791
  <td>
13836
- <code><span title="str">str</span></code>
13792
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
13837
13793
  </td>
13838
13794
  <td>
13839
13795
  <div class="doc-md-description">
13840
- <p>Code format. Just wraps content within <pre> tags (value: "code").</p>
13796
+ <p>Optional key to take label from the context.</p>
13841
13797
  </div>
13842
13798
  </td>
13843
13799
  </tr>
@@ -13863,27 +13819,19 @@
13863
13819
 
13864
13820
 
13865
13821
 
13866
-
13867
-
13868
- </div>
13869
-
13870
- </div>
13871
-
13872
- </div>
13873
-
13874
-
13875
13822
  <div class="doc doc-object doc-function">
13876
13823
 
13877
13824
 
13878
- <h3 id="nautobot.apps.ui.BaseTextPanel.__init__" class="doc doc-heading">
13879
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">render_as</span><span class="o">=</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_content_text.html&#39;</span><span class="p">,</span> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
13825
+ <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.as_pair" class="doc doc-heading">
13826
+ <code class="highlight language-python"><span class="n">as_pair</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
13880
13827
 
13881
- <a href="#nautobot.apps.ui.BaseTextPanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
13828
+ <a href="#nautobot.apps.ui.BaseBreadcrumbItem.as_pair" class="headerlink" title="Permanent link">&para;</a></h3>
13882
13829
 
13883
13830
 
13884
13831
  <div class="doc doc-contents ">
13885
13832
 
13886
- <p>Instantiate BaseTextPanel.</p>
13833
+ <p>Construct the (URL, label) pair for the breadcrumb.</p>
13834
+ <p>Combines <code>get_url()</code> and <code>get_label()</code> and applies formatting to the label.</p>
13887
13835
 
13888
13836
 
13889
13837
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -13899,154 +13847,50 @@
13899
13847
  <tbody>
13900
13848
  <tr class="doc-section-item">
13901
13849
  <td>
13902
- <code>render_as</code>
13850
+ <code>context</code>
13903
13851
  </td>
13904
13852
  <td>
13905
- <code><a class="autorefs autorefs-internal" title="RenderOptions (nautobot.core.ui.object_detail.BaseTextPanel.RenderOptions)" href="#nautobot.apps.ui.BaseTextPanel.RenderOptions">RenderOptions</a></code>
13853
+ <code><span title="django.template.Context">Context</span></code>
13906
13854
  </td>
13907
13855
  <td>
13908
13856
  <div class="doc-md-description">
13909
- <p>One of BaseTextPanel.RenderOptions to define rendering function.</p>
13857
+ <p>Context object used to resolve the breadcrumb parts.</p>
13910
13858
  </div>
13911
13859
  </td>
13912
13860
  <td>
13913
- <code><span title="nautobot.core.ui.object_detail.BaseTextPanel.RenderOptions.MARKDOWN">MARKDOWN</span></code>
13914
- </td>
13915
- </tr>
13916
- <tr class="doc-section-item">
13917
- <td>
13918
- <code>render_placeholder</code>
13919
- </td>
13920
- <td>
13921
- <code><span title="bool">bool</span></code>
13922
- </td>
13923
- <td>
13924
- <div class="doc-md-description">
13925
- <p>Whether to render placeholder text if given value is "falsy".</p>
13926
- </div>
13927
- </td>
13928
- <td>
13929
- <code>True</code>
13930
- </td>
13931
- </tr>
13932
- <tr class="doc-section-item">
13933
- <td>
13934
- <code>body_content_template_path</code>
13935
- </td>
13936
- <td>
13937
- <code><span title="str">str</span></code>
13938
- </td>
13939
- <td>
13940
- <div class="doc-md-description">
13941
- <p>The path of the template to use for the body content.
13942
- Can be overridden for custom use cases.</p>
13943
- </div>
13944
- </td>
13945
- <td>
13946
- <code>&#39;components/panel/body_content_text.html&#39;</code>
13947
- </td>
13948
- </tr>
13949
- <tr class="doc-section-item">
13950
- <td>
13951
- <code>kwargs</code>
13952
- </td>
13953
- <td>
13954
- <code><span title="dict">dict</span></code>
13955
- </td>
13956
- <td>
13957
- <div class="doc-md-description">
13958
- <p>Additional keyword arguments passed to <code>Panel.__init__</code>.</p>
13959
- </div>
13960
- </td>
13961
- <td>
13962
- <code>{}</code>
13861
+ <em>required</em>
13963
13862
  </td>
13964
13863
  </tr>
13965
13864
  </tbody>
13966
13865
  </table>
13967
13866
 
13968
13867
 
13969
- </div>
13970
-
13971
- </div>
13972
-
13973
-
13974
-
13975
- </div>
13976
-
13977
- </div>
13978
-
13979
- </div>
13980
-
13981
- <div class="doc doc-object doc-class">
13982
-
13983
-
13984
-
13985
- <h2 id="nautobot.apps.ui.Breadcrumbs" class="doc doc-heading">
13986
- <code>nautobot.apps.ui.Breadcrumbs</code>
13987
-
13988
-
13989
- <a href="#nautobot.apps.ui.Breadcrumbs" class="headerlink" title="Permanent link">&para;</a></h2>
13990
-
13991
-
13992
- <div class="doc doc-contents ">
13993
-
13994
-
13995
- <p>Base class responsible for generating and rendering breadcrumbs for a page.</p>
13996
- <p>This class supports flexible breadcrumb configuration through:
13997
- - <code>items</code>: Default breadcrumb items per view action.</p>
13998
- <p>You can add more information to the breadcrumbs trail by passing appropriate
13999
- <code>BreadcrumbItem</code> objects grouped by view action (e.g., "*", "list", "add", "edit").</p>
14000
-
14001
-
14002
- <details class="special-breadcrumb-item-actions" open>
14003
- <summary>Special breadcrumb item actions</summary>
14004
- <ul>
14005
- <li><code>*</code> - if no other action was found, items from <code>*</code> will be used</li>
14006
- <li><code>detail</code> action is used when there is no dedicated action for given request
14007
- and there is <code>context['detail'] = True</code> set in context</li>
14008
- </ul>
14009
- </details> <div class="admonition important">
14010
- <p class="admonition-title">Important</p>
14011
- <p>This class automatically adds the:
14012
- - <code>InstanceBreadcrumbItem</code> at the end of <code>detail</code> breadcrumbs
14013
- - <code>ModelBreadcrumbItem</code> at the beginning of <code>list</code> and <code>detail</code> breadcrumbs</p>
14014
- <p>You can override this behavior by subclassing this class and updating
14015
- the <code>list_breadcrumb_item</code> or <code>detail_breadcrumb_item</code> attributes.</p>
14016
- <p>If you're using custom action other than <code>list</code> / <code>detail</code> you need to remember to add above breadcrumbs
14017
- if you need them in your custom action.</p>
14018
- </div>
14019
-
14020
-
14021
- <p><span class="doc-section-title">Attributes:</span></p>
13868
+ <p><span class="doc-section-title">Returns:</span></p>
14022
13869
  <table>
14023
13870
  <thead>
14024
13871
  <tr>
14025
- <th>Name</th>
14026
13872
  <th>Type</th>
14027
13873
  <th>Description</th>
14028
13874
  </tr>
14029
13875
  </thead>
14030
13876
  <tbody>
14031
13877
  <tr class="doc-section-item">
14032
- <td><code><span title="nautobot.apps.ui.Breadcrumbs.template">template</span></code></td>
14033
13878
  <td>
14034
13879
  <code><span title="str">str</span></code>
14035
13880
  </td>
14036
13881
  <td>
14037
13882
  <div class="doc-md-description">
14038
- <p>Path to the template used to render the breadcrumb component.</p>
13883
+ <p>tuple[str, Optional[str]]: A tuple of (URL, label), where URL may be an empty string</p>
14039
13884
  </div>
14040
13885
  </td>
14041
13886
  </tr>
14042
13887
  <tr class="doc-section-item">
14043
- <td><code><span title="nautobot.apps.ui.Breadcrumbs.items">items</span></code></td>
14044
13888
  <td>
14045
- <code><span title="dict">dict</span>[<span title="str">str</span>, <span title="list">list</span>[<span title="BreadcrumbItem">BreadcrumbItem</span>]]</code>
13889
+ <code><span title="str">str</span></code>
14046
13890
  </td>
14047
13891
  <td>
14048
13892
  <div class="doc-md-description">
14049
- <p>Default breadcrumb items per view action.</p>
13893
+ <p>if unresolved, and label.</p>
14050
13894
  </div>
14051
13895
  </td>
14052
13896
  </tr>
@@ -14054,36 +13898,22 @@ if you need them in your custom action.</p>
14054
13898
  </table>
14055
13899
 
14056
13900
 
13901
+ </div>
14057
13902
 
14058
-
14059
-
14060
-
14061
-
14062
-
14063
-
14064
-
14065
- <div class="doc doc-children">
14066
-
14067
-
14068
-
14069
-
14070
-
14071
-
14072
-
14073
-
13903
+ </div>
14074
13904
 
14075
13905
  <div class="doc doc-object doc-function">
14076
13906
 
14077
13907
 
14078
- <h3 id="nautobot.apps.ui.Breadcrumbs.__init__" class="doc doc-heading">
14079
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="s1">&#39;components/breadcrumbs.html&#39;</span><span class="p">)</span></code>
13908
+ <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.get_label" class="doc doc-heading">
13909
+ <code class="highlight language-python"><span class="n">get_label</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14080
13910
 
14081
- <a href="#nautobot.apps.ui.Breadcrumbs.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
13911
+ <a href="#nautobot.apps.ui.BaseBreadcrumbItem.get_label" class="headerlink" title="Permanent link">&para;</a></h3>
14082
13912
 
14083
13913
 
14084
13914
  <div class="doc doc-contents ">
14085
13915
 
14086
- <p>Initialize the Breadcrumbs configuration.</p>
13916
+ <p>Get the label (display text) for the breadcrumb.</p>
14087
13917
 
14088
13918
 
14089
13919
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -14099,35 +13929,42 @@ if you need them in your custom action.</p>
14099
13929
  <tbody>
14100
13930
  <tr class="doc-section-item">
14101
13931
  <td>
14102
- <code>items</code>
13932
+ <code>context</code>
14103
13933
  </td>
14104
13934
  <td>
14105
- <code><span title="typing.Optional">Optional</span>[<span title="dict">dict</span>[<span title="str">str</span>, <span title="list">list</span>[<span title="BreadcrumbItem">BreadcrumbItem</span>]]]</code>
13935
+ <code><span title="django.template.Context">Context</span></code>
14106
13936
  </td>
14107
13937
  <td>
14108
13938
  <div class="doc-md-description">
14109
- <p>Default breadcrumb items for each action.</p>
13939
+ <p>The current template context.</p>
14110
13940
  </div>
14111
13941
  </td>
14112
13942
  <td>
14113
- <code>None</code>
13943
+ <em>required</em>
14114
13944
  </td>
14115
13945
  </tr>
13946
+ </tbody>
13947
+ </table>
13948
+
13949
+
13950
+ <p><span class="doc-section-title">Returns:</span></p>
13951
+ <table>
13952
+ <thead>
13953
+ <tr>
13954
+ <th>Name</th> <th>Type</th>
13955
+ <th>Description</th>
13956
+ </tr>
13957
+ </thead>
13958
+ <tbody>
14116
13959
  <tr class="doc-section-item">
14117
- <td>
14118
- <code>template</code>
14119
- </td>
14120
- <td>
13960
+ <td><code>str</code></td> <td>
14121
13961
  <code><span title="str">str</span></code>
14122
13962
  </td>
14123
13963
  <td>
14124
13964
  <div class="doc-md-description">
14125
- <p>The template used to render the breadcrumbs.</p>
13965
+ <p>Label as a string.</p>
14126
13966
  </div>
14127
13967
  </td>
14128
- <td>
14129
- <code>&#39;components/breadcrumbs.html&#39;</code>
14130
- </td>
14131
13968
  </tr>
14132
13969
  </tbody>
14133
13970
  </table>
@@ -14140,15 +13977,15 @@ if you need them in your custom action.</p>
14140
13977
  <div class="doc doc-object doc-function">
14141
13978
 
14142
13979
 
14143
- <h3 id="nautobot.apps.ui.Breadcrumbs.filter_breadcrumbs_items" class="doc doc-heading">
14144
- <code class="highlight language-python"><span class="n">filter_breadcrumbs_items</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></code>
13980
+ <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.get_url" class="doc doc-heading">
13981
+ <code class="highlight language-python"><span class="n">get_url</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14145
13982
 
14146
- <a href="#nautobot.apps.ui.Breadcrumbs.filter_breadcrumbs_items" class="headerlink" title="Permanent link">&para;</a></h3>
13983
+ <a href="#nautobot.apps.ui.BaseBreadcrumbItem.get_url" class="headerlink" title="Permanent link">&para;</a></h3>
14147
13984
 
14148
13985
 
14149
13986
  <div class="doc doc-contents ">
14150
13987
 
14151
- <p>Filters out all items that both label and url are None or empty str.</p>
13988
+ <p>Get the URL for the breadcrumb item.</p>
14152
13989
 
14153
13990
 
14154
13991
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -14162,22 +13999,6 @@ if you need them in your custom action.</p>
14162
13999
  </tr>
14163
14000
  </thead>
14164
14001
  <tbody>
14165
- <tr class="doc-section-item">
14166
- <td>
14167
- <code>items</code>
14168
- </td>
14169
- <td>
14170
- <code><span title="list">list</span>[<span title="tuple">tuple</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
14171
- </td>
14172
- <td>
14173
- <div class="doc-md-description">
14174
- <p>breadcrumb items pairs.</p>
14175
- </div>
14176
- </td>
14177
- <td>
14178
- <em>required</em>
14179
- </td>
14180
- </tr>
14181
14002
  <tr class="doc-section-item">
14182
14003
  <td>
14183
14004
  <code>context</code>
@@ -14187,7 +14008,7 @@ if you need them in your custom action.</p>
14187
14008
  </td>
14188
14009
  <td>
14189
14010
  <div class="doc-md-description">
14190
- <p>The view or template context.</p>
14011
+ <p>The current template context.</p>
14191
14012
  </div>
14192
14013
  </td>
14193
14014
  <td>
@@ -14209,11 +14030,11 @@ if you need them in your custom action.</p>
14209
14030
  <tbody>
14210
14031
  <tr class="doc-section-item">
14211
14032
  <td>
14212
- <code><span title="list">list</span>[<span title="tuple">tuple</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
14033
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
14213
14034
  </td>
14214
14035
  <td>
14215
14036
  <div class="doc-md-description">
14216
- <p>A list of filtered breadcrumb items pairs.</p>
14037
+ <p>Optional[str]: The URL as a string, or None.</p>
14217
14038
  </div>
14218
14039
  </td>
14219
14040
  </tr>
@@ -14228,16 +14049,19 @@ if you need them in your custom action.</p>
14228
14049
  <div class="doc doc-object doc-function">
14229
14050
 
14230
14051
 
14231
- <h3 id="nautobot.apps.ui.Breadcrumbs.get_breadcrumbs_items" class="doc doc-heading">
14232
- <code class="highlight language-python"><span class="n">get_breadcrumbs_items</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14052
+ <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.resolve_reverse_params" class="doc doc-heading">
14053
+ <code class="highlight language-python"><span class="n">resolve_reverse_params</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></code>
14233
14054
 
14234
- <a href="#nautobot.apps.ui.Breadcrumbs.get_breadcrumbs_items" class="headerlink" title="Permanent link">&para;</a></h3>
14055
+ <span class="doc doc-labels">
14056
+ <small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
14057
+ </span>
14058
+
14059
+ <a href="#nautobot.apps.ui.BaseBreadcrumbItem.resolve_reverse_params" class="headerlink" title="Permanent link">&para;</a></h3>
14235
14060
 
14236
14061
 
14237
14062
  <div class="doc doc-contents ">
14238
14063
 
14239
- <p>Compute the list of breadcrumb items for the given context.</p>
14240
- <p>Items are determined based on the <code>view_action</code> in context.</p>
14064
+ <p>Resolves parameters for URL reversing, calling if callable, or returning as-is.</p>
14241
14065
 
14242
14066
 
14243
14067
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -14251,6 +14075,22 @@ if you need them in your custom action.</p>
14251
14075
  </tr>
14252
14076
  </thead>
14253
14077
  <tbody>
14078
+ <tr class="doc-section-item">
14079
+ <td>
14080
+ <code>params</code>
14081
+ </td>
14082
+ <td>
14083
+ <code><span title="nautobot.core.ui.breadcrumbs.ReverseParams">ReverseParams</span></code>
14084
+ </td>
14085
+ <td>
14086
+ <div class="doc-md-description">
14087
+ <p>Dict or callable to resolve.</p>
14088
+ </div>
14089
+ </td>
14090
+ <td>
14091
+ <em>required</em>
14092
+ </td>
14093
+ </tr>
14254
14094
  <tr class="doc-section-item">
14255
14095
  <td>
14256
14096
  <code>context</code>
@@ -14260,7 +14100,7 @@ if you need them in your custom action.</p>
14260
14100
  </td>
14261
14101
  <td>
14262
14102
  <div class="doc-md-description">
14263
- <p>The view or template context that holds <code>view_action</code> and related state.</p>
14103
+ <p>Context for callables.</p>
14264
14104
  </div>
14265
14105
  </td>
14266
14106
  <td>
@@ -14282,11 +14122,11 @@ if you need them in your custom action.</p>
14282
14122
  <tbody>
14283
14123
  <tr class="doc-section-item">
14284
14124
  <td>
14285
- <code><span title="list">list</span>[<span title="tuple">tuple</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
14125
+ <code><span title="dict">dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
14286
14126
  </td>
14287
14127
  <td>
14288
14128
  <div class="doc-md-description">
14289
- <p>A list of (url, label) tuples representing breadcrumb entries.</p>
14129
+ <p>dict[str, Any]: Dictionary of parameters for URL reversing.</p>
14290
14130
  </div>
14291
14131
  </td>
14292
14132
  </tr>
@@ -14301,17 +14141,15 @@ if you need them in your custom action.</p>
14301
14141
  <div class="doc doc-object doc-function">
14302
14142
 
14303
14143
 
14304
- <h3 id="nautobot.apps.ui.Breadcrumbs.get_extra_context" class="doc doc-heading">
14305
- <code class="highlight language-python"><span class="n">get_extra_context</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14144
+ <h3 id="nautobot.apps.ui.BaseBreadcrumbItem.reverse_view_name" class="doc doc-heading">
14145
+ <code class="highlight language-python"><span class="n">reverse_view_name</span><span class="p">(</span><span class="n">view_name</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">reverse_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">reverse_query_params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
14306
14146
 
14307
- <a href="#nautobot.apps.ui.Breadcrumbs.get_extra_context" class="headerlink" title="Permanent link">&para;</a></h3>
14147
+ <a href="#nautobot.apps.ui.BaseBreadcrumbItem.reverse_view_name" class="headerlink" title="Permanent link">&para;</a></h3>
14308
14148
 
14309
14149
 
14310
14150
  <div class="doc doc-contents ">
14311
14151
 
14312
- <p>Provide additional data to include in the rendering context, based on the configuration of this component.</p>
14313
- <p>Context updated here will be applied to resolving url and labels.
14314
- Please ote that you can't override <code>breadcrumb_items</code> here because items are generated after this method call.</p>
14152
+ <p>Reverse a Django view name into a URL, optionally adding query parameters.</p>
14315
14153
 
14316
14154
 
14317
14155
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -14327,90 +14165,30 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14327
14165
  <tbody>
14328
14166
  <tr class="doc-section-item">
14329
14167
  <td>
14330
- <code>context</code>
14168
+ <code>view_name</code>
14331
14169
  </td>
14332
14170
  <td>
14333
- <code><span title="django.template.Context">Context</span></code>
14171
+ <code><span title="str">str</span></code>
14334
14172
  </td>
14335
14173
  <td>
14336
14174
  <div class="doc-md-description">
14337
- <p>The current context passed to <code>render()</code>.</p>
14175
+ <p>Django view name to reverse.</p>
14338
14176
  </div>
14339
14177
  </td>
14340
14178
  <td>
14341
14179
  <em>required</em>
14342
14180
  </td>
14343
14181
  </tr>
14344
- </tbody>
14345
- </table>
14346
-
14347
-
14348
- <p><span class="doc-section-title">Returns:</span></p>
14349
- <table>
14350
- <thead>
14351
- <tr>
14352
- <th>Type</th>
14353
- <th>Description</th>
14354
- </tr>
14355
- </thead>
14356
- <tbody>
14357
- <tr class="doc-section-item">
14358
- <td>
14359
- <code><span title="dict">dict</span></code>
14360
- </td>
14361
- <td>
14362
- <div class="doc-md-description">
14363
- <p>A dictionary of extra context variables.</p>
14364
- </div>
14365
- </td>
14366
- </tr>
14367
- </tbody>
14368
- </table>
14369
-
14370
-
14371
- </div>
14372
-
14373
- </div>
14374
-
14375
- <div class="doc doc-object doc-function">
14376
-
14377
-
14378
- <h3 id="nautobot.apps.ui.Breadcrumbs.get_items_for_action" class="doc doc-heading">
14379
- <code class="highlight language-python"><span class="n">get_items_for_action</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">detail</span><span class="p">)</span></code>
14380
-
14381
- <span class="doc doc-labels">
14382
- <small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
14383
- </span>
14384
-
14385
- <a href="#nautobot.apps.ui.Breadcrumbs.get_items_for_action" class="headerlink" title="Permanent link">&para;</a></h3>
14386
-
14387
-
14388
- <div class="doc doc-contents ">
14389
-
14390
- <p>Get the breadcrumb items for a specific action, 'detail' or to asterisk (*) if present.</p>
14391
-
14392
-
14393
- <p><span class="doc-section-title">Parameters:</span></p>
14394
- <table>
14395
- <thead>
14396
- <tr>
14397
- <th>Name</th>
14398
- <th>Type</th>
14399
- <th>Description</th>
14400
- <th>Default</th>
14401
- </tr>
14402
- </thead>
14403
- <tbody>
14404
14182
  <tr class="doc-section-item">
14405
14183
  <td>
14406
- <code>items</code>
14184
+ <code>context</code>
14407
14185
  </td>
14408
14186
  <td>
14409
- <code><span title="nautobot.core.ui.breadcrumbs.BreadcrumbItemsType">BreadcrumbItemsType</span></code>
14187
+ <code><span title="django.template.Context">Context</span></code>
14410
14188
  </td>
14411
14189
  <td>
14412
14190
  <div class="doc-md-description">
14413
- <p>Dictionary mapping action names to breadcrumb item lists.</p>
14191
+ <p>Template context, used to resolve params if needed.</p>
14414
14192
  </div>
14415
14193
  </td>
14416
14194
  <td>
@@ -14419,34 +14197,34 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14419
14197
  </tr>
14420
14198
  <tr class="doc-section-item">
14421
14199
  <td>
14422
- <code>action</code>
14200
+ <code>reverse_kwargs</code>
14423
14201
  </td>
14424
14202
  <td>
14425
- <code><span title="str">str</span></code>
14203
+ <code><span title="nautobot.core.ui.breadcrumbs.ReverseParams">ReverseParams</span></code>
14426
14204
  </td>
14427
14205
  <td>
14428
14206
  <div class="doc-md-description">
14429
- <p>Current action name (e.g., "list", "detail").</p>
14207
+ <p>URL kwargs for reversing.</p>
14430
14208
  </div>
14431
14209
  </td>
14432
14210
  <td>
14433
- <em>required</em>
14211
+ <code>None</code>
14434
14212
  </td>
14435
14213
  </tr>
14436
14214
  <tr class="doc-section-item">
14437
14215
  <td>
14438
- <code>detail</code>
14216
+ <code>reverse_query_params</code>
14439
14217
  </td>
14440
14218
  <td>
14441
- <code><span title="bool">bool</span></code>
14219
+ <code><span title="nautobot.core.ui.breadcrumbs.ReverseParams">ReverseParams</span></code>
14442
14220
  </td>
14443
14221
  <td>
14444
14222
  <div class="doc-md-description">
14445
- <p>Whether this is a detail view (for fallback).</p>
14223
+ <p>Query parameters to append.</p>
14446
14224
  </div>
14447
14225
  </td>
14448
14226
  <td>
14449
- <em>required</em>
14227
+ <code>None</code>
14450
14228
  </td>
14451
14229
  </tr>
14452
14230
  </tbody>
@@ -14464,16 +14242,11 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14464
14242
  <tbody>
14465
14243
  <tr class="doc-section-item">
14466
14244
  <td>
14467
- <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
14468
-
14469
-
14470
-
14471
- dataclass
14472
- (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a>]</code>
14245
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
14473
14246
  </td>
14474
14247
  <td>
14475
14248
  <div class="doc-md-description">
14476
- <p>list[BaseBreadcrumbItem]: List of breadcrumb items for the action.</p>
14249
+ <p>Optional[str]: The resolved URL as a string, or None if reversing fails.</p>
14477
14250
  </div>
14478
14251
  </td>
14479
14252
  </tr>
@@ -14485,71 +14258,131 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14485
14258
 
14486
14259
  </div>
14487
14260
 
14488
- <div class="doc doc-object doc-function">
14489
14261
 
14490
14262
 
14491
- <h3 id="nautobot.apps.ui.Breadcrumbs.is_label_not_blank" class="doc doc-heading">
14492
- <code class="highlight language-python"><span class="n">is_label_not_blank</span><span class="p">(</span><span class="n">label</span><span class="p">)</span></code>
14263
+ </div>
14493
14264
 
14494
- <span class="doc doc-labels">
14495
- <small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
14496
- </span>
14265
+ </div>
14497
14266
 
14498
- <a href="#nautobot.apps.ui.Breadcrumbs.is_label_not_blank" class="headerlink" title="Permanent link">&para;</a></h3>
14267
+ </div>
14268
+
14269
+ <div class="doc doc-object doc-class">
14270
+
14271
+
14272
+
14273
+ <h2 id="nautobot.apps.ui.BaseTextPanel" class="doc doc-heading">
14274
+ <code>nautobot.apps.ui.BaseTextPanel</code>
14275
+
14276
+
14277
+ <a href="#nautobot.apps.ui.BaseTextPanel" class="headerlink" title="Permanent link">&para;</a></h2>
14499
14278
 
14500
14279
 
14501
14280
  <div class="doc doc-contents ">
14281
+ <p class="doc doc-class-bases">
14282
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Panel (nautobot.core.ui.object_detail.Panel)" href="#nautobot.apps.ui.Panel">Panel</a></code></p>
14502
14283
 
14503
- <p>Check if label is not empty (only whitespace) or None.</p>
14284
+
14285
+ <p>A panel that renders a single value as text, Markdown, JSON, or YAML.</p>
14504
14286
 
14505
14287
 
14506
- <p><span class="doc-section-title">Parameters:</span></p>
14288
+
14289
+
14290
+
14291
+
14292
+
14293
+
14294
+
14295
+
14296
+ <div class="doc doc-children">
14297
+
14298
+
14299
+
14300
+
14301
+
14302
+
14303
+
14304
+
14305
+ <div class="doc doc-object doc-class">
14306
+
14307
+
14308
+
14309
+ <h3 id="nautobot.apps.ui.BaseTextPanel.RenderOptions" class="doc doc-heading">
14310
+ <code>RenderOptions</code>
14311
+
14312
+
14313
+ <a href="#nautobot.apps.ui.BaseTextPanel.RenderOptions" class="headerlink" title="Permanent link">&para;</a></h3>
14314
+
14315
+
14316
+ <div class="doc doc-contents ">
14317
+ <p class="doc doc-class-bases">
14318
+ Bases: <code><span title="enum.Enum">Enum</span></code></p>
14319
+
14320
+
14321
+ <p>Options available for text panels for different type of rendering a given input.</p>
14322
+
14323
+
14324
+ <p><span class="doc-section-title">Attributes:</span></p>
14507
14325
  <table>
14508
14326
  <thead>
14509
14327
  <tr>
14510
14328
  <th>Name</th>
14511
14329
  <th>Type</th>
14512
14330
  <th>Description</th>
14513
- <th>Default</th>
14514
14331
  </tr>
14515
14332
  </thead>
14516
14333
  <tbody>
14517
14334
  <tr class="doc-section-item">
14335
+ <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.PLAINTEXT">PLAINTEXT</span></code></td>
14518
14336
  <td>
14519
- <code>label</code>
14337
+ <code><span title="str">str</span></code>
14338
+ </td>
14339
+ <td>
14340
+ <div class="doc-md-description">
14341
+ <p>Plain text format (value: "plaintext").</p>
14342
+ </div>
14520
14343
  </td>
14344
+ </tr>
14345
+ <tr class="doc-section-item">
14346
+ <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.JSON">JSON</span></code></td>
14521
14347
  <td>
14522
14348
  <code><span title="str">str</span></code>
14523
14349
  </td>
14524
14350
  <td>
14525
14351
  <div class="doc-md-description">
14526
- <p>The label to check.</p>
14352
+ <p>Dict will be dumped into JSON and pretty-formatted (value: "json").</p>
14527
14353
  </div>
14528
14354
  </td>
14355
+ </tr>
14356
+ <tr class="doc-section-item">
14357
+ <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.YAML">YAML</span></code></td>
14358
+ <td>
14359
+ <code><span title="str">str</span></code>
14360
+ </td>
14529
14361
  <td>
14530
- <em>required</em>
14362
+ <div class="doc-md-description">
14363
+ <p>Dict will be displayed as pretty-formatted yaml (value: "yaml")</p>
14364
+ </div>
14531
14365
  </td>
14532
14366
  </tr>
14533
- </tbody>
14534
- </table>
14535
-
14536
-
14537
- <p><span class="doc-section-title">Returns:</span></p>
14538
- <table>
14539
- <thead>
14540
- <tr>
14541
- <th>Type</th>
14542
- <th>Description</th>
14543
- </tr>
14544
- </thead>
14545
- <tbody>
14546
14367
  <tr class="doc-section-item">
14368
+ <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.MARKDOWN">MARKDOWN</span></code></td>
14547
14369
  <td>
14548
- <code><span title="bool">bool</span></code>
14370
+ <code><span title="str">str</span></code>
14549
14371
  </td>
14550
14372
  <td>
14551
14373
  <div class="doc-md-description">
14552
- <p>True if label is not None or empty (only whitespace), False otherwise.</p>
14374
+ <p>Markdown format (value: "markdown").</p>
14375
+ </div>
14376
+ </td>
14377
+ </tr>
14378
+ <tr class="doc-section-item">
14379
+ <td><code><span title="nautobot.apps.ui.BaseTextPanel.RenderOptions.CODE">CODE</span></code></td>
14380
+ <td>
14381
+ <code><span title="str">str</span></code>
14382
+ </td>
14383
+ <td>
14384
+ <div class="doc-md-description">
14385
+ <p>Code format. Just wraps content within <pre> tags (value: "code").</p>
14553
14386
  </div>
14554
14387
  </td>
14555
14388
  </tr>
@@ -14557,23 +14390,45 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14557
14390
  </table>
14558
14391
 
14559
14392
 
14393
+
14394
+
14395
+
14396
+
14397
+
14398
+
14399
+
14400
+
14401
+ <div class="doc doc-children">
14402
+
14403
+
14404
+
14405
+
14406
+
14407
+
14408
+
14409
+
14410
+
14411
+
14412
+
14413
+ </div>
14414
+
14560
14415
  </div>
14561
14416
 
14562
14417
  </div>
14563
14418
 
14419
+
14564
14420
  <div class="doc doc-object doc-function">
14565
14421
 
14566
14422
 
14567
- <h3 id="nautobot.apps.ui.Breadcrumbs.render" class="doc doc-heading">
14568
- <code class="highlight language-python"><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14423
+ <h3 id="nautobot.apps.ui.BaseTextPanel.__init__" class="doc doc-heading">
14424
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">render_as</span><span class="o">=</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_content_text.html&#39;</span><span class="p">,</span> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
14569
14425
 
14570
- <a href="#nautobot.apps.ui.Breadcrumbs.render" class="headerlink" title="Permanent link">&para;</a></h3>
14426
+ <a href="#nautobot.apps.ui.BaseTextPanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
14571
14427
 
14572
14428
 
14573
14429
  <div class="doc doc-contents ">
14574
14430
 
14575
- <p>Render the breadcrumbs HTML.</p>
14576
- <p>This method updates the context with the generated breadcrumb items and any additional context from <code>get_extra_context</code>.</p>
14431
+ <p>Instantiate BaseTextPanel.</p>
14577
14432
 
14578
14433
 
14579
14434
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -14589,40 +14444,758 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14589
14444
  <tbody>
14590
14445
  <tr class="doc-section-item">
14591
14446
  <td>
14592
- <code>context</code>
14447
+ <code>render_as</code>
14593
14448
  </td>
14594
14449
  <td>
14595
- <code><span title="django.template.Context">Context</span></code>
14450
+ <code><a class="autorefs autorefs-internal" title="RenderOptions (nautobot.core.ui.object_detail.BaseTextPanel.RenderOptions)" href="#nautobot.apps.ui.BaseTextPanel.RenderOptions">RenderOptions</a></code>
14596
14451
  </td>
14597
14452
  <td>
14598
14453
  <div class="doc-md-description">
14599
- <p>The current rendering context.</p>
14454
+ <p>One of BaseTextPanel.RenderOptions to define rendering function.</p>
14600
14455
  </div>
14601
14456
  </td>
14602
14457
  <td>
14603
- <em>required</em>
14458
+ <code><span title="nautobot.core.ui.object_detail.BaseTextPanel.RenderOptions.MARKDOWN">MARKDOWN</span></code>
14604
14459
  </td>
14605
14460
  </tr>
14606
- </tbody>
14607
- </table>
14608
-
14609
-
14610
- <p><span class="doc-section-title">Returns:</span></p>
14611
- <table>
14612
- <thead>
14613
- <tr>
14614
- <th>Type</th>
14615
- <th>Description</th>
14616
- </tr>
14617
- </thead>
14618
- <tbody>
14619
14461
  <tr class="doc-section-item">
14620
14462
  <td>
14621
- <code><span title="str">str</span></code>
14463
+ <code>render_placeholder</code>
14464
+ </td>
14465
+ <td>
14466
+ <code><span title="bool">bool</span></code>
14622
14467
  </td>
14623
14468
  <td>
14624
14469
  <div class="doc-md-description">
14625
- <p>Rendered HTML for the breadcrumb component.</p>
14470
+ <p>Whether to render placeholder text if given value is "falsy".</p>
14471
+ </div>
14472
+ </td>
14473
+ <td>
14474
+ <code>True</code>
14475
+ </td>
14476
+ </tr>
14477
+ <tr class="doc-section-item">
14478
+ <td>
14479
+ <code>body_content_template_path</code>
14480
+ </td>
14481
+ <td>
14482
+ <code><span title="str">str</span></code>
14483
+ </td>
14484
+ <td>
14485
+ <div class="doc-md-description">
14486
+ <p>The path of the template to use for the body content.
14487
+ Can be overridden for custom use cases.</p>
14488
+ </div>
14489
+ </td>
14490
+ <td>
14491
+ <code>&#39;components/panel/body_content_text.html&#39;</code>
14492
+ </td>
14493
+ </tr>
14494
+ <tr class="doc-section-item">
14495
+ <td>
14496
+ <code>kwargs</code>
14497
+ </td>
14498
+ <td>
14499
+ <code><span title="dict">dict</span></code>
14500
+ </td>
14501
+ <td>
14502
+ <div class="doc-md-description">
14503
+ <p>Additional keyword arguments passed to <code>Panel.__init__</code>.</p>
14504
+ </div>
14505
+ </td>
14506
+ <td>
14507
+ <code>{}</code>
14508
+ </td>
14509
+ </tr>
14510
+ </tbody>
14511
+ </table>
14512
+
14513
+
14514
+ </div>
14515
+
14516
+ </div>
14517
+
14518
+
14519
+
14520
+ </div>
14521
+
14522
+ </div>
14523
+
14524
+ </div>
14525
+
14526
+ <div class="doc doc-object doc-class">
14527
+
14528
+
14529
+
14530
+ <h2 id="nautobot.apps.ui.Breadcrumbs" class="doc doc-heading">
14531
+ <code>nautobot.apps.ui.Breadcrumbs</code>
14532
+
14533
+
14534
+ <a href="#nautobot.apps.ui.Breadcrumbs" class="headerlink" title="Permanent link">&para;</a></h2>
14535
+
14536
+
14537
+ <div class="doc doc-contents ">
14538
+
14539
+
14540
+ <p>Base class responsible for generating and rendering breadcrumbs for a page.</p>
14541
+ <p>This class supports flexible breadcrumb configuration through:
14542
+ - <code>items</code>: Default breadcrumb items per view action.</p>
14543
+ <p>You can add more information to the breadcrumbs trail by passing appropriate
14544
+ <code>BreadcrumbItem</code> objects grouped by view action (e.g., "*", "list", "add", "edit").</p>
14545
+
14546
+
14547
+ <details class="special-breadcrumb-item-actions" open>
14548
+ <summary>Special breadcrumb item actions</summary>
14549
+ <ul>
14550
+ <li><code>*</code> - if no other action was found, items from <code>*</code> will be used</li>
14551
+ <li><code>detail</code> action is used when there is no dedicated action for given request
14552
+ and there is <code>context['detail'] = True</code> set in context</li>
14553
+ </ul>
14554
+ </details> <div class="admonition important">
14555
+ <p class="admonition-title">Important</p>
14556
+ <p>This class automatically adds the:
14557
+ - <code>InstanceBreadcrumbItem</code> at the end of <code>detail</code> breadcrumbs
14558
+ - <code>ModelBreadcrumbItem</code> at the beginning of <code>list</code> and <code>detail</code> breadcrumbs</p>
14559
+ <p>You can override this behavior by subclassing this class and updating
14560
+ the <code>list_breadcrumb_item</code> or <code>detail_breadcrumb_item</code> attributes.</p>
14561
+ <p>If you're using custom action other than <code>list</code> / <code>detail</code> you need to remember to add above breadcrumbs
14562
+ if you need them in your custom action.</p>
14563
+ </div>
14564
+
14565
+
14566
+ <p><span class="doc-section-title">Attributes:</span></p>
14567
+ <table>
14568
+ <thead>
14569
+ <tr>
14570
+ <th>Name</th>
14571
+ <th>Type</th>
14572
+ <th>Description</th>
14573
+ </tr>
14574
+ </thead>
14575
+ <tbody>
14576
+ <tr class="doc-section-item">
14577
+ <td><code><span title="nautobot.apps.ui.Breadcrumbs.template">template</span></code></td>
14578
+ <td>
14579
+ <code><span title="str">str</span></code>
14580
+ </td>
14581
+ <td>
14582
+ <div class="doc-md-description">
14583
+ <p>Path to the template used to render the breadcrumb component.</p>
14584
+ </div>
14585
+ </td>
14586
+ </tr>
14587
+ <tr class="doc-section-item">
14588
+ <td><code><span title="nautobot.apps.ui.Breadcrumbs.items">items</span></code></td>
14589
+ <td>
14590
+ <code><span title="dict">dict</span>[<span title="str">str</span>, <span title="list">list</span>[<span title="BreadcrumbItem">BreadcrumbItem</span>]]</code>
14591
+ </td>
14592
+ <td>
14593
+ <div class="doc-md-description">
14594
+ <p>Default breadcrumb items per view action.</p>
14595
+ </div>
14596
+ </td>
14597
+ </tr>
14598
+ </tbody>
14599
+ </table>
14600
+
14601
+
14602
+
14603
+
14604
+
14605
+
14606
+
14607
+
14608
+
14609
+
14610
+ <div class="doc doc-children">
14611
+
14612
+
14613
+
14614
+
14615
+
14616
+
14617
+
14618
+
14619
+
14620
+ <div class="doc doc-object doc-function">
14621
+
14622
+
14623
+ <h3 id="nautobot.apps.ui.Breadcrumbs.__init__" class="doc doc-heading">
14624
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="s1">&#39;components/breadcrumbs.html&#39;</span><span class="p">,</span> <span class="n">detail_item_label</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
14625
+
14626
+ <a href="#nautobot.apps.ui.Breadcrumbs.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
14627
+
14628
+
14629
+ <div class="doc doc-contents ">
14630
+
14631
+ <p>Initialize the Breadcrumbs configuration.</p>
14632
+
14633
+
14634
+ <p><span class="doc-section-title">Parameters:</span></p>
14635
+ <table>
14636
+ <thead>
14637
+ <tr>
14638
+ <th>Name</th>
14639
+ <th>Type</th>
14640
+ <th>Description</th>
14641
+ <th>Default</th>
14642
+ </tr>
14643
+ </thead>
14644
+ <tbody>
14645
+ <tr class="doc-section-item">
14646
+ <td>
14647
+ <code>items</code>
14648
+ </td>
14649
+ <td>
14650
+ <code><span title="typing.Optional">Optional</span>[<span title="dict">dict</span>[<span title="str">str</span>, <span title="list">list</span>[<span title="BreadcrumbItem">BreadcrumbItem</span>]]]</code>
14651
+ </td>
14652
+ <td>
14653
+ <div class="doc-md-description">
14654
+ <p>Default breadcrumb items for each action.</p>
14655
+ </div>
14656
+ </td>
14657
+ <td>
14658
+ <code>None</code>
14659
+ </td>
14660
+ </tr>
14661
+ <tr class="doc-section-item">
14662
+ <td>
14663
+ <code>template</code>
14664
+ </td>
14665
+ <td>
14666
+ <code><span title="str">str</span></code>
14667
+ </td>
14668
+ <td>
14669
+ <div class="doc-md-description">
14670
+ <p>The template used to render the breadcrumbs.</p>
14671
+ </div>
14672
+ </td>
14673
+ <td>
14674
+ <code>&#39;components/breadcrumbs.html&#39;</code>
14675
+ </td>
14676
+ </tr>
14677
+ <tr class="doc-section-item">
14678
+ <td>
14679
+ <code>detail_item_label</code>
14680
+ </td>
14681
+ <td>
14682
+ <code><span title="typing.Union">Union</span>[<span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="str">str</span>], <span title="nautobot.core.ui.breadcrumbs.WithStr">WithStr</span>, None]</code>
14683
+ </td>
14684
+ <td>
14685
+ <div class="doc-md-description">
14686
+ <p>Custom label for last built-in breadcrumb item with link to the object details.</p>
14687
+ </div>
14688
+ </td>
14689
+ <td>
14690
+ <code>None</code>
14691
+ </td>
14692
+ </tr>
14693
+ </tbody>
14694
+ </table>
14695
+
14696
+
14697
+ </div>
14698
+
14699
+ </div>
14700
+
14701
+ <div class="doc doc-object doc-function">
14702
+
14703
+
14704
+ <h3 id="nautobot.apps.ui.Breadcrumbs.filter_breadcrumbs_items" class="doc doc-heading">
14705
+ <code class="highlight language-python"><span class="n">filter_breadcrumbs_items</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></code>
14706
+
14707
+ <a href="#nautobot.apps.ui.Breadcrumbs.filter_breadcrumbs_items" class="headerlink" title="Permanent link">&para;</a></h3>
14708
+
14709
+
14710
+ <div class="doc doc-contents ">
14711
+
14712
+ <p>Filters out all items that both label and url are None or empty str.</p>
14713
+
14714
+
14715
+ <p><span class="doc-section-title">Parameters:</span></p>
14716
+ <table>
14717
+ <thead>
14718
+ <tr>
14719
+ <th>Name</th>
14720
+ <th>Type</th>
14721
+ <th>Description</th>
14722
+ <th>Default</th>
14723
+ </tr>
14724
+ </thead>
14725
+ <tbody>
14726
+ <tr class="doc-section-item">
14727
+ <td>
14728
+ <code>items</code>
14729
+ </td>
14730
+ <td>
14731
+ <code><span title="list">list</span>[<span title="tuple">tuple</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
14732
+ </td>
14733
+ <td>
14734
+ <div class="doc-md-description">
14735
+ <p>breadcrumb items pairs.</p>
14736
+ </div>
14737
+ </td>
14738
+ <td>
14739
+ <em>required</em>
14740
+ </td>
14741
+ </tr>
14742
+ <tr class="doc-section-item">
14743
+ <td>
14744
+ <code>context</code>
14745
+ </td>
14746
+ <td>
14747
+ <code><span title="django.template.Context">Context</span></code>
14748
+ </td>
14749
+ <td>
14750
+ <div class="doc-md-description">
14751
+ <p>The view or template context.</p>
14752
+ </div>
14753
+ </td>
14754
+ <td>
14755
+ <em>required</em>
14756
+ </td>
14757
+ </tr>
14758
+ </tbody>
14759
+ </table>
14760
+
14761
+
14762
+ <p><span class="doc-section-title">Returns:</span></p>
14763
+ <table>
14764
+ <thead>
14765
+ <tr>
14766
+ <th>Type</th>
14767
+ <th>Description</th>
14768
+ </tr>
14769
+ </thead>
14770
+ <tbody>
14771
+ <tr class="doc-section-item">
14772
+ <td>
14773
+ <code><span title="list">list</span>[<span title="tuple">tuple</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
14774
+ </td>
14775
+ <td>
14776
+ <div class="doc-md-description">
14777
+ <p>A list of filtered breadcrumb items pairs.</p>
14778
+ </div>
14779
+ </td>
14780
+ </tr>
14781
+ </tbody>
14782
+ </table>
14783
+
14784
+
14785
+ </div>
14786
+
14787
+ </div>
14788
+
14789
+ <div class="doc doc-object doc-function">
14790
+
14791
+
14792
+ <h3 id="nautobot.apps.ui.Breadcrumbs.get_breadcrumbs_items" class="doc doc-heading">
14793
+ <code class="highlight language-python"><span class="n">get_breadcrumbs_items</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14794
+
14795
+ <a href="#nautobot.apps.ui.Breadcrumbs.get_breadcrumbs_items" class="headerlink" title="Permanent link">&para;</a></h3>
14796
+
14797
+
14798
+ <div class="doc doc-contents ">
14799
+
14800
+ <p>Compute the list of breadcrumb items for the given context.</p>
14801
+ <p>Items are determined based on the <code>view_action</code> in context.</p>
14802
+
14803
+
14804
+ <p><span class="doc-section-title">Parameters:</span></p>
14805
+ <table>
14806
+ <thead>
14807
+ <tr>
14808
+ <th>Name</th>
14809
+ <th>Type</th>
14810
+ <th>Description</th>
14811
+ <th>Default</th>
14812
+ </tr>
14813
+ </thead>
14814
+ <tbody>
14815
+ <tr class="doc-section-item">
14816
+ <td>
14817
+ <code>context</code>
14818
+ </td>
14819
+ <td>
14820
+ <code><span title="django.template.Context">Context</span></code>
14821
+ </td>
14822
+ <td>
14823
+ <div class="doc-md-description">
14824
+ <p>The view or template context that holds <code>view_action</code> and related state.</p>
14825
+ </div>
14826
+ </td>
14827
+ <td>
14828
+ <em>required</em>
14829
+ </td>
14830
+ </tr>
14831
+ </tbody>
14832
+ </table>
14833
+
14834
+
14835
+ <p><span class="doc-section-title">Returns:</span></p>
14836
+ <table>
14837
+ <thead>
14838
+ <tr>
14839
+ <th>Type</th>
14840
+ <th>Description</th>
14841
+ </tr>
14842
+ </thead>
14843
+ <tbody>
14844
+ <tr class="doc-section-item">
14845
+ <td>
14846
+ <code><span title="list">list</span>[<span title="tuple">tuple</span>[<span title="str">str</span>, <span title="str">str</span>]]</code>
14847
+ </td>
14848
+ <td>
14849
+ <div class="doc-md-description">
14850
+ <p>A list of (url, label) tuples representing breadcrumb entries.</p>
14851
+ </div>
14852
+ </td>
14853
+ </tr>
14854
+ </tbody>
14855
+ </table>
14856
+
14857
+
14858
+ </div>
14859
+
14860
+ </div>
14861
+
14862
+ <div class="doc doc-object doc-function">
14863
+
14864
+
14865
+ <h3 id="nautobot.apps.ui.Breadcrumbs.get_extra_context" class="doc doc-heading">
14866
+ <code class="highlight language-python"><span class="n">get_extra_context</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14867
+
14868
+ <a href="#nautobot.apps.ui.Breadcrumbs.get_extra_context" class="headerlink" title="Permanent link">&para;</a></h3>
14869
+
14870
+
14871
+ <div class="doc doc-contents ">
14872
+
14873
+ <p>Provide additional data to include in the rendering context, based on the configuration of this component.</p>
14874
+ <p>Context updated here will be applied to resolving url and labels.
14875
+ Please ote that you can't override <code>breadcrumb_items</code> here because items are generated after this method call.</p>
14876
+
14877
+
14878
+ <p><span class="doc-section-title">Parameters:</span></p>
14879
+ <table>
14880
+ <thead>
14881
+ <tr>
14882
+ <th>Name</th>
14883
+ <th>Type</th>
14884
+ <th>Description</th>
14885
+ <th>Default</th>
14886
+ </tr>
14887
+ </thead>
14888
+ <tbody>
14889
+ <tr class="doc-section-item">
14890
+ <td>
14891
+ <code>context</code>
14892
+ </td>
14893
+ <td>
14894
+ <code><span title="django.template.Context">Context</span></code>
14895
+ </td>
14896
+ <td>
14897
+ <div class="doc-md-description">
14898
+ <p>The current context passed to <code>render()</code>.</p>
14899
+ </div>
14900
+ </td>
14901
+ <td>
14902
+ <em>required</em>
14903
+ </td>
14904
+ </tr>
14905
+ </tbody>
14906
+ </table>
14907
+
14908
+
14909
+ <p><span class="doc-section-title">Returns:</span></p>
14910
+ <table>
14911
+ <thead>
14912
+ <tr>
14913
+ <th>Type</th>
14914
+ <th>Description</th>
14915
+ </tr>
14916
+ </thead>
14917
+ <tbody>
14918
+ <tr class="doc-section-item">
14919
+ <td>
14920
+ <code><span title="dict">dict</span></code>
14921
+ </td>
14922
+ <td>
14923
+ <div class="doc-md-description">
14924
+ <p>A dictionary of extra context variables.</p>
14925
+ </div>
14926
+ </td>
14927
+ </tr>
14928
+ </tbody>
14929
+ </table>
14930
+
14931
+
14932
+ </div>
14933
+
14934
+ </div>
14935
+
14936
+ <div class="doc doc-object doc-function">
14937
+
14938
+
14939
+ <h3 id="nautobot.apps.ui.Breadcrumbs.get_items_for_action" class="doc doc-heading">
14940
+ <code class="highlight language-python"><span class="n">get_items_for_action</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">detail</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></code>
14941
+
14942
+ <a href="#nautobot.apps.ui.Breadcrumbs.get_items_for_action" class="headerlink" title="Permanent link">&para;</a></h3>
14943
+
14944
+
14945
+ <div class="doc doc-contents ">
14946
+
14947
+ <p>Get the breadcrumb items for a specific action, 'detail' or to asterisk (*) if present.</p>
14948
+
14949
+
14950
+ <p><span class="doc-section-title">Parameters:</span></p>
14951
+ <table>
14952
+ <thead>
14953
+ <tr>
14954
+ <th>Name</th>
14955
+ <th>Type</th>
14956
+ <th>Description</th>
14957
+ <th>Default</th>
14958
+ </tr>
14959
+ </thead>
14960
+ <tbody>
14961
+ <tr class="doc-section-item">
14962
+ <td>
14963
+ <code>items</code>
14964
+ </td>
14965
+ <td>
14966
+ <code><span title="nautobot.core.ui.breadcrumbs.BreadcrumbItemsType">BreadcrumbItemsType</span></code>
14967
+ </td>
14968
+ <td>
14969
+ <div class="doc-md-description">
14970
+ <p>Dictionary mapping action names to breadcrumb item lists.</p>
14971
+ </div>
14972
+ </td>
14973
+ <td>
14974
+ <em>required</em>
14975
+ </td>
14976
+ </tr>
14977
+ <tr class="doc-section-item">
14978
+ <td>
14979
+ <code>action</code>
14980
+ </td>
14981
+ <td>
14982
+ <code><span title="str">str</span></code>
14983
+ </td>
14984
+ <td>
14985
+ <div class="doc-md-description">
14986
+ <p>Current action name (e.g., "list", "detail").</p>
14987
+ </div>
14988
+ </td>
14989
+ <td>
14990
+ <em>required</em>
14991
+ </td>
14992
+ </tr>
14993
+ <tr class="doc-section-item">
14994
+ <td>
14995
+ <code>detail</code>
14996
+ </td>
14997
+ <td>
14998
+ <code><span title="bool">bool</span></code>
14999
+ </td>
15000
+ <td>
15001
+ <div class="doc-md-description">
15002
+ <p>Whether this is a detail view (for fallback).</p>
15003
+ </div>
15004
+ </td>
15005
+ <td>
15006
+ <em>required</em>
15007
+ </td>
15008
+ </tr>
15009
+ <tr class="doc-section-item">
15010
+ <td>
15011
+ <code>context</code>
15012
+ </td>
15013
+ <td>
15014
+ <code><span title="django.template.Context">Context</span></code>
15015
+ </td>
15016
+ <td>
15017
+ <div class="doc-md-description">
15018
+ <p>The view or template context.</p>
15019
+ </div>
15020
+ </td>
15021
+ <td>
15022
+ <em>required</em>
15023
+ </td>
15024
+ </tr>
15025
+ </tbody>
15026
+ </table>
15027
+
15028
+
15029
+ <p><span class="doc-section-title">Returns:</span></p>
15030
+ <table>
15031
+ <thead>
15032
+ <tr>
15033
+ <th>Type</th>
15034
+ <th>Description</th>
15035
+ </tr>
15036
+ </thead>
15037
+ <tbody>
15038
+ <tr class="doc-section-item">
15039
+ <td>
15040
+ <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
15041
+
15042
+
15043
+
15044
+ dataclass
15045
+ (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a>]</code>
15046
+ </td>
15047
+ <td>
15048
+ <div class="doc-md-description">
15049
+ <p>list[BaseBreadcrumbItem]: List of breadcrumb items for the action.</p>
15050
+ </div>
15051
+ </td>
15052
+ </tr>
15053
+ </tbody>
15054
+ </table>
15055
+
15056
+
15057
+ </div>
15058
+
15059
+ </div>
15060
+
15061
+ <div class="doc doc-object doc-function">
15062
+
15063
+
15064
+ <h3 id="nautobot.apps.ui.Breadcrumbs.is_label_not_blank" class="doc doc-heading">
15065
+ <code class="highlight language-python"><span class="n">is_label_not_blank</span><span class="p">(</span><span class="n">label</span><span class="p">)</span></code>
15066
+
15067
+ <span class="doc doc-labels">
15068
+ <small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
15069
+ </span>
15070
+
15071
+ <a href="#nautobot.apps.ui.Breadcrumbs.is_label_not_blank" class="headerlink" title="Permanent link">&para;</a></h3>
15072
+
15073
+
15074
+ <div class="doc doc-contents ">
15075
+
15076
+ <p>Check if label is not empty (only whitespace) or None.</p>
15077
+
15078
+
15079
+ <p><span class="doc-section-title">Parameters:</span></p>
15080
+ <table>
15081
+ <thead>
15082
+ <tr>
15083
+ <th>Name</th>
15084
+ <th>Type</th>
15085
+ <th>Description</th>
15086
+ <th>Default</th>
15087
+ </tr>
15088
+ </thead>
15089
+ <tbody>
15090
+ <tr class="doc-section-item">
15091
+ <td>
15092
+ <code>label</code>
15093
+ </td>
15094
+ <td>
15095
+ <code><span title="str">str</span></code>
15096
+ </td>
15097
+ <td>
15098
+ <div class="doc-md-description">
15099
+ <p>The label to check.</p>
15100
+ </div>
15101
+ </td>
15102
+ <td>
15103
+ <em>required</em>
15104
+ </td>
15105
+ </tr>
15106
+ </tbody>
15107
+ </table>
15108
+
15109
+
15110
+ <p><span class="doc-section-title">Returns:</span></p>
15111
+ <table>
15112
+ <thead>
15113
+ <tr>
15114
+ <th>Type</th>
15115
+ <th>Description</th>
15116
+ </tr>
15117
+ </thead>
15118
+ <tbody>
15119
+ <tr class="doc-section-item">
15120
+ <td>
15121
+ <code><span title="bool">bool</span></code>
15122
+ </td>
15123
+ <td>
15124
+ <div class="doc-md-description">
15125
+ <p>True if label is not None or empty (only whitespace), False otherwise.</p>
15126
+ </div>
15127
+ </td>
15128
+ </tr>
15129
+ </tbody>
15130
+ </table>
15131
+
15132
+
15133
+ </div>
15134
+
15135
+ </div>
15136
+
15137
+ <div class="doc doc-object doc-function">
15138
+
15139
+
15140
+ <h3 id="nautobot.apps.ui.Breadcrumbs.render" class="doc doc-heading">
15141
+ <code class="highlight language-python"><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
15142
+
15143
+ <a href="#nautobot.apps.ui.Breadcrumbs.render" class="headerlink" title="Permanent link">&para;</a></h3>
15144
+
15145
+
15146
+ <div class="doc doc-contents ">
15147
+
15148
+ <p>Render the breadcrumbs HTML.</p>
15149
+ <p>This method updates the context with the generated breadcrumb items and any additional context from <code>get_extra_context</code>.</p>
15150
+
15151
+
15152
+ <p><span class="doc-section-title">Parameters:</span></p>
15153
+ <table>
15154
+ <thead>
15155
+ <tr>
15156
+ <th>Name</th>
15157
+ <th>Type</th>
15158
+ <th>Description</th>
15159
+ <th>Default</th>
15160
+ </tr>
15161
+ </thead>
15162
+ <tbody>
15163
+ <tr class="doc-section-item">
15164
+ <td>
15165
+ <code>context</code>
15166
+ </td>
15167
+ <td>
15168
+ <code><span title="django.template.Context">Context</span></code>
15169
+ </td>
15170
+ <td>
15171
+ <div class="doc-md-description">
15172
+ <p>The current rendering context.</p>
15173
+ </div>
15174
+ </td>
15175
+ <td>
15176
+ <em>required</em>
15177
+ </td>
15178
+ </tr>
15179
+ </tbody>
15180
+ </table>
15181
+
15182
+
15183
+ <p><span class="doc-section-title">Returns:</span></p>
15184
+ <table>
15185
+ <thead>
15186
+ <tr>
15187
+ <th>Type</th>
15188
+ <th>Description</th>
15189
+ </tr>
15190
+ </thead>
15191
+ <tbody>
15192
+ <tr class="doc-section-item">
15193
+ <td>
15194
+ <code><span title="str">str</span></code>
15195
+ </td>
15196
+ <td>
15197
+ <div class="doc-md-description">
15198
+ <p>Rendered HTML for the breadcrumb component.</p>
14626
15199
  </div>
14627
15200
  </td>
14628
15201
  </tr>
@@ -14683,7 +15256,7 @@ Please ote that you can't override <code>breadcrumb_items</code> here because it
14683
15256
 
14684
15257
 
14685
15258
  <h3 id="nautobot.apps.ui.Button.__init__" class="doc doc-heading">
14686
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">label</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">ButtonColorChoices</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span> <span class="n">link_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">icon</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template_path</span><span class="o">=</span><span class="s1">&#39;components/button/default.html&#39;</span><span class="p">,</span> <span class="n">required_permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">javascript_template_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">link_includes_pk</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">context_object_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
15259
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">label</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">ButtonColorChoices</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span> <span class="n">link_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">icon</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template_path</span><span class="o">=</span><span class="s1">&#39;components/button/default.html&#39;</span><span class="p">,</span> <span class="n">javascript_template_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">link_includes_pk</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">context_object_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">render_on_tab_id</span><span class="o">=</span><span class="s1">&#39;main&#39;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
14687
15260
 
14688
15261
  <a href="#nautobot.apps.ui.Button.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
14689
15262
 
@@ -14805,15 +15378,15 @@ and override the <code>get_link()</code> method.</p>
14805
15378
  </tr>
14806
15379
  <tr class="doc-section-item">
14807
15380
  <td>
14808
- <code>required_permissions</code>
15381
+ <code>javascript_template_path</code>
14809
15382
  </td>
14810
15383
  <td>
14811
- <code><span title="list">list</span></code>
15384
+ <code><span title="str">str</span></code>
14812
15385
  </td>
14813
15386
  <td>
14814
15387
  <div class="doc-md-description">
14815
- <p>Permissions such as <code>["dcim.add_consoleport"]</code>.
14816
- The button will only be rendered if the user has these permissions.</p>
15388
+ <p>JavaScript template to render and include with this button.
15389
+ Does not need to include the wrapping <code>&lt;script&gt;...&lt;/script&gt;</code> tags as those will be added automatically.</p>
14817
15390
  </div>
14818
15391
  </td>
14819
15392
  <td>
@@ -14822,15 +15395,14 @@ The button will only be rendered if the user has these permissions.</p>
14822
15395
  </tr>
14823
15396
  <tr class="doc-section-item">
14824
15397
  <td>
14825
- <code>javascript_template_path</code>
15398
+ <code>attributes</code>
14826
15399
  </td>
14827
15400
  <td>
14828
- <code><span title="str">str</span></code>
15401
+ <code><span title="dict">dict</span></code>
14829
15402
  </td>
14830
15403
  <td>
14831
15404
  <div class="doc-md-description">
14832
- <p>JavaScript template to render and include with this button.
14833
- Does not need to include the wrapping <code>&lt;script&gt;...&lt;/script&gt;</code> tags as those will be added automatically.</p>
15405
+ <p>Additional HTML attributes and their values to attach to the button.</p>
14834
15406
  </div>
14835
15407
  </td>
14836
15408
  <td>
@@ -14839,14 +15411,14 @@ Does not need to include the wrapping <code>&lt;script&gt;...&lt;/script&gt;</co
14839
15411
  </tr>
14840
15412
  <tr class="doc-section-item">
14841
15413
  <td>
14842
- <code>attributes</code>
15414
+ <code>size</code>
14843
15415
  </td>
14844
15416
  <td>
14845
- <code><span title="dict">dict</span></code>
15417
+ <code><span title="str">str</span></code>
14846
15418
  </td>
14847
15419
  <td>
14848
15420
  <div class="doc-md-description">
14849
- <p>Additional HTML attributes and their values to attach to the button.</p>
15421
+ <p>The size of the button (e.g. <code>xs</code> or <code>sm</code>), used to apply a Bootstrap-style sizing.</p>
14850
15422
  </div>
14851
15423
  </td>
14852
15424
  <td>
@@ -14855,18 +15427,18 @@ Does not need to include the wrapping <code>&lt;script&gt;...&lt;/script&gt;</co
14855
15427
  </tr>
14856
15428
  <tr class="doc-section-item">
14857
15429
  <td>
14858
- <code>size</code>
15430
+ <code>render_on_tab_id</code>
14859
15431
  </td>
14860
15432
  <td>
14861
15433
  <code><span title="str">str</span></code>
14862
15434
  </td>
14863
15435
  <td>
14864
15436
  <div class="doc-md-description">
14865
- <p>The size of the button (e.g. <code>xs</code> or <code>sm</code>), used to apply a Bootstrap-style sizing.</p>
15437
+ <p>The (only) tab that this button should appear on.</p>
14866
15438
  </div>
14867
15439
  </td>
14868
15440
  <td>
14869
- <code>None</code>
15441
+ <code>&#39;main&#39;</code>
14870
15442
  </td>
14871
15443
  </tr>
14872
15444
  </tbody>
@@ -14933,24 +15505,6 @@ more advanced link construction.</p>
14933
15505
 
14934
15506
  </div>
14935
15507
 
14936
- <div class="doc doc-object doc-function">
14937
-
14938
-
14939
- <h3 id="nautobot.apps.ui.Button.should_render" class="doc doc-heading">
14940
- <code class="highlight language-python"><span class="n">should_render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
14941
-
14942
- <a href="#nautobot.apps.ui.Button.should_render" class="headerlink" title="Permanent link">&para;</a></h3>
14943
-
14944
-
14945
- <div class="doc doc-contents ">
14946
-
14947
- <p>Render if and only if the requesting user has appropriate permissions (if any).</p>
14948
-
14949
-
14950
- </div>
14951
-
14952
- </div>
14953
-
14954
15508
 
14955
15509
 
14956
15510
  </div>
@@ -15043,7 +15597,7 @@ more advanced link construction.</p>
15043
15597
 
15044
15598
 
15045
15599
  <h3 id="nautobot.apps.ui.Component.__init__" class="doc doc-heading">
15046
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">weight</span><span class="p">)</span></code>
15600
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">weight</span><span class="p">,</span> <span class="n">required_permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
15047
15601
 
15048
15602
  <a href="#nautobot.apps.ui.Component.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
15049
15603
 
@@ -15081,6 +15635,23 @@ rendered "first", usually towards the top left of the page.</p>
15081
15635
  <em>required</em>
15082
15636
  </td>
15083
15637
  </tr>
15638
+ <tr class="doc-section-item">
15639
+ <td>
15640
+ <code>required_permissions</code>
15641
+ </td>
15642
+ <td>
15643
+ <code><span title="list">list</span></code>
15644
+ </td>
15645
+ <td>
15646
+ <div class="doc-md-description">
15647
+ <p>Permissions such as <code>["dcim.add_consoleport"]</code>.
15648
+ The component will only be rendered if the user has these permissions.</p>
15649
+ </div>
15650
+ </td>
15651
+ <td>
15652
+ <code>None</code>
15653
+ </td>
15654
+ </tr>
15084
15655
  </tbody>
15085
15656
  </table>
15086
15657
 
@@ -15188,6 +15759,7 @@ a Tab has a separate "label" that must be rendered by calling its <code>render_l
15188
15759
  <p>This API is designed to provide "short-circuit" logic for skipping what otherwise might be expensive rendering.
15189
15760
  In general most Components may also return an empty string when actually rendered, which is typically also a
15190
15761
  means to specify that they do not need to be rendered, but may be more expensive to derive.</p>
15762
+ <p>The default implementation here checks for <code>self.required_permissions</code> if any.</p>
15191
15763
 
15192
15764
 
15193
15765
  <p><span class="doc-section-title">Returns:</span></p>
@@ -15273,7 +15845,7 @@ means to specify that they do not need to be rendered, but may be more expensive
15273
15845
 
15274
15846
  <div class="doc doc-contents ">
15275
15847
 
15276
- <p>Instantiate a DataDictTablePanel.</p>
15848
+ <p>Instantiate a DataTablePanel.</p>
15277
15849
 
15278
15850
 
15279
15851
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -15393,19 +15965,193 @@ Mutually exclusive with <code>column_headers</code>.</p>
15393
15965
 
15394
15966
 
15395
15967
 
15396
- <h2 id="nautobot.apps.ui.DistinctViewTab" class="doc doc-heading">
15397
- <code>nautobot.apps.ui.DistinctViewTab</code>
15968
+ <h2 id="nautobot.apps.ui.DistinctViewTab" class="doc doc-heading">
15969
+ <code>nautobot.apps.ui.DistinctViewTab</code>
15970
+
15971
+
15972
+ <a href="#nautobot.apps.ui.DistinctViewTab" class="headerlink" title="Permanent link">&para;</a></h2>
15973
+
15974
+
15975
+ <div class="doc doc-contents ">
15976
+ <p class="doc doc-class-bases">
15977
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Tab (nautobot.core.ui.object_detail.Tab)" href="#nautobot.apps.ui.Tab">Tab</a></code></p>
15978
+
15979
+
15980
+ <p>A Tab that doesn't render inline on the same page, but instead links to a distinct view of its own when clicked.</p>
15981
+
15982
+
15983
+ <p><span class="doc-section-title">Parameters:</span></p>
15984
+ <table>
15985
+ <thead>
15986
+ <tr>
15987
+ <th>Name</th>
15988
+ <th>Type</th>
15989
+ <th>Description</th>
15990
+ <th>Default</th>
15991
+ </tr>
15992
+ </thead>
15993
+ <tbody>
15994
+ <tr class="doc-section-item">
15995
+ <td>
15996
+ <code>url_name</code>
15997
+ </td>
15998
+ <td>
15999
+ <code><span title="str">str</span></code>
16000
+ </td>
16001
+ <td>
16002
+ <div class="doc-md-description">
16003
+ <p>The name of the URL pattern to link to, which will be reversed to generate the URL.</p>
16004
+ </div>
16005
+ </td>
16006
+ <td>
16007
+ <em>required</em>
16008
+ </td>
16009
+ </tr>
16010
+ <tr class="doc-section-item">
16011
+ <td>
16012
+ <code>label_wrapper_template_path</code>
16013
+ </td>
16014
+ <td>
16015
+ <code><span title="str">str</span></code>
16016
+ </td>
16017
+ <td>
16018
+ <div class="doc-md-description">
16019
+ <p>Template path to render the tab label to HTML.</p>
16020
+ </div>
16021
+ </td>
16022
+ <td>
16023
+ <code>&#39;components/tab/label_wrapper_distinct_view.html&#39;</code>
16024
+ </td>
16025
+ </tr>
16026
+ <tr class="doc-section-item">
16027
+ <td>
16028
+ <code>related_object_attribute</code>
16029
+ </td>
16030
+ <td>
16031
+ <code><span title="str">str</span></code>
16032
+ </td>
16033
+ <td>
16034
+ <div class="doc-md-description">
16035
+ <p>The name of the related object attribute to count for the tab label.</p>
16036
+ </div>
16037
+ </td>
16038
+ <td>
16039
+ <code>&#39;&#39;</code>
16040
+ </td>
16041
+ </tr>
16042
+ <tr class="doc-section-item">
16043
+ <td>
16044
+ <code>hide_if_empty</code>
16045
+ </td>
16046
+ <td>
16047
+ <code><span title="bool">bool</span></code>
16048
+ </td>
16049
+ <td>
16050
+ <div class="doc-md-description">
16051
+ <p>Do not render this tab if the related_object_attribute is an empty queryset.</p>
16052
+ </div>
16053
+ </td>
16054
+ <td>
16055
+ <code>False</code>
16056
+ </td>
16057
+ </tr>
16058
+ </tbody>
16059
+ </table>
16060
+
16061
+
16062
+
16063
+
16064
+
16065
+
16066
+
16067
+
16068
+
16069
+
16070
+ <div class="doc doc-children">
16071
+
16072
+
16073
+
16074
+
16075
+
16076
+
16077
+
16078
+
16079
+
16080
+ <div class="doc doc-object doc-function">
16081
+
16082
+
16083
+ <h3 id="nautobot.apps.ui.DistinctViewTab.should_render_content" class="doc doc-heading">
16084
+ <code class="highlight language-python"><span class="n">should_render_content</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16085
+
16086
+ <a href="#nautobot.apps.ui.DistinctViewTab.should_render_content" class="headerlink" title="Permanent link">&para;</a></h3>
16087
+
16088
+
16089
+ <div class="doc doc-contents ">
16090
+
16091
+ <p>A DistinctViewTab should only render its content if the view in question is active.</p>
16092
+
16093
+
16094
+ </div>
16095
+
16096
+ </div>
16097
+
16098
+
16099
+
16100
+ </div>
16101
+
16102
+ </div>
16103
+
16104
+ </div>
16105
+
16106
+ <div class="doc doc-object doc-class">
16107
+
16108
+
16109
+
16110
+ <h2 id="nautobot.apps.ui.DropdownButton" class="doc doc-heading">
16111
+ <code>nautobot.apps.ui.DropdownButton</code>
15398
16112
 
15399
16113
 
15400
- <a href="#nautobot.apps.ui.DistinctViewTab" class="headerlink" title="Permanent link">&para;</a></h2>
16114
+ <a href="#nautobot.apps.ui.DropdownButton" class="headerlink" title="Permanent link">&para;</a></h2>
15401
16115
 
15402
16116
 
15403
16117
  <div class="doc doc-contents ">
15404
16118
  <p class="doc doc-class-bases">
15405
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Tab (nautobot.core.ui.object_detail.Tab)" href="#nautobot.apps.ui.Tab">Tab</a></code></p>
16119
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Button (nautobot.core.ui.object_detail.Button)" href="#nautobot.apps.ui.Button">Button</a></code></p>
15406
16120
 
15407
16121
 
15408
- <p>A Tab that doesn't render inline on the same page, but instead links to a distinct view of its own when clicked.</p>
16122
+ <p>A Button that has one or more other buttons as <code>children</code>, which it renders into a dropdown menu.</p>
16123
+
16124
+
16125
+
16126
+
16127
+
16128
+
16129
+
16130
+
16131
+
16132
+
16133
+ <div class="doc doc-children">
16134
+
16135
+
16136
+
16137
+
16138
+
16139
+
16140
+
16141
+
16142
+
16143
+ <div class="doc doc-object doc-function">
16144
+
16145
+
16146
+ <h3 id="nautobot.apps.ui.DropdownButton.__init__" class="doc doc-heading">
16147
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">children</span><span class="p">,</span> <span class="n">template_path</span><span class="o">=</span><span class="s1">&#39;components/button/dropdown.html&#39;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
16148
+
16149
+ <a href="#nautobot.apps.ui.DropdownButton.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
16150
+
16151
+
16152
+ <div class="doc doc-contents ">
16153
+
16154
+ <p>Initialize a DropdownButton component.</p>
15409
16155
 
15410
16156
 
15411
16157
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -15421,14 +16167,14 @@ Mutually exclusive with <code>column_headers</code>.</p>
15421
16167
  <tbody>
15422
16168
  <tr class="doc-section-item">
15423
16169
  <td>
15424
- <code>url_name</code>
16170
+ <code>children</code>
15425
16171
  </td>
15426
16172
  <td>
15427
- <code><span title="str">str</span></code>
16173
+ <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.Button (nautobot.core.ui.object_detail.Button)" href="#nautobot.apps.ui.Button">Button</a>]</code>
15428
16174
  </td>
15429
16175
  <td>
15430
16176
  <div class="doc-md-description">
15431
- <p>The name of the URL pattern to link to, which will be reversed to generate the URL.</p>
16177
+ <p>Elements of the dropdown menu associated to this DropdownButton.</p>
15432
16178
  </div>
15433
16179
  </td>
15434
16180
  <td>
@@ -15437,40 +16183,156 @@ Mutually exclusive with <code>column_headers</code>.</p>
15437
16183
  </tr>
15438
16184
  <tr class="doc-section-item">
15439
16185
  <td>
15440
- <code>label_wrapper_template_path</code>
15441
- </td>
15442
- <td>
15443
- <code><span title="str">str</span></code>
15444
- </td>
15445
- <td>
15446
- <div class="doc-md-description">
15447
- <p>Template path to render the tab label to HTML.</p>
15448
- </div>
15449
- </td>
15450
- <td>
15451
- <code>&#39;components/tab/label_wrapper_distinct_view.html&#39;</code>
15452
- </td>
15453
- </tr>
15454
- <tr class="doc-section-item">
15455
- <td>
15456
- <code>related_object_attribute</code>
16186
+ <code>template_path</code>
15457
16187
  </td>
15458
16188
  <td>
15459
16189
  <code><span title="str">str</span></code>
15460
16190
  </td>
15461
16191
  <td>
15462
16192
  <div class="doc-md-description">
15463
- <p>The name of the related object attribute to count for the tab label.</p>
16193
+ <p>Dropdown-specific template file.</p>
15464
16194
  </div>
15465
16195
  </td>
15466
16196
  <td>
15467
- <code>&#39;&#39;</code>
16197
+ <code>&#39;components/button/dropdown.html&#39;</code>
15468
16198
  </td>
15469
16199
  </tr>
15470
16200
  </tbody>
15471
16201
  </table>
15472
16202
 
15473
16203
 
16204
+ </div>
16205
+
16206
+ </div>
16207
+
16208
+ <div class="doc doc-object doc-function">
16209
+
16210
+
16211
+ <h3 id="nautobot.apps.ui.DropdownButton.get_extra_context" class="doc doc-heading">
16212
+ <code class="highlight language-python"><span class="n">get_extra_context</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16213
+
16214
+ <a href="#nautobot.apps.ui.DropdownButton.get_extra_context" class="headerlink" title="Permanent link">&para;</a></h3>
16215
+
16216
+
16217
+ <div class="doc doc-contents ">
16218
+
16219
+ <p>Add the children of this DropdownButton to the other Button context.</p>
16220
+
16221
+
16222
+ </div>
16223
+
16224
+ </div>
16225
+
16226
+
16227
+
16228
+ </div>
16229
+
16230
+ </div>
16231
+
16232
+ </div>
16233
+
16234
+ <div class="doc doc-object doc-class">
16235
+
16236
+
16237
+
16238
+ <h2 id="nautobot.apps.ui.GroupedKeyValueTablePanel" class="doc doc-heading">
16239
+ <code>nautobot.apps.ui.GroupedKeyValueTablePanel</code>
16240
+
16241
+
16242
+ <a href="#nautobot.apps.ui.GroupedKeyValueTablePanel" class="headerlink" title="Permanent link">&para;</a></h2>
16243
+
16244
+
16245
+ <div class="doc doc-contents ">
16246
+ <p class="doc doc-class-bases">
16247
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.KeyValueTablePanel (nautobot.core.ui.object_detail.KeyValueTablePanel)" href="#nautobot.apps.ui.KeyValueTablePanel">KeyValueTablePanel</a></code></p>
16248
+
16249
+
16250
+ <p>A KeyValueTablePanel that displays its data within collapsible accordion groupings, such as object custom fields.</p>
16251
+ <p>Expects data in the form <code>{grouping1: {key1: value1, key2: value2, ...}, grouping2: {...}, ...}</code>.</p>
16252
+ <p>The special grouping <code>""</code> may be used to indicate top-level key/value pairs that don't belong to a group.</p>
16253
+
16254
+
16255
+
16256
+
16257
+
16258
+
16259
+
16260
+
16261
+
16262
+
16263
+ <div class="doc doc-children">
16264
+
16265
+
16266
+
16267
+
16268
+
16269
+
16270
+
16271
+
16272
+
16273
+ <div class="doc doc-object doc-function">
16274
+
16275
+
16276
+ <h3 id="nautobot.apps.ui.GroupedKeyValueTablePanel.render_body_content" class="doc doc-heading">
16277
+ <code class="highlight language-python"><span class="n">render_body_content</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16278
+
16279
+ <a href="#nautobot.apps.ui.GroupedKeyValueTablePanel.render_body_content" class="headerlink" title="Permanent link">&para;</a></h3>
16280
+
16281
+
16282
+ <div class="doc doc-contents ">
16283
+
16284
+ <p>Render groups of key-value pairs to HTML.</p>
16285
+
16286
+
16287
+ </div>
16288
+
16289
+ </div>
16290
+
16291
+ <div class="doc doc-object doc-function">
16292
+
16293
+
16294
+ <h3 id="nautobot.apps.ui.GroupedKeyValueTablePanel.render_header_extra_content" class="doc doc-heading">
16295
+ <code class="highlight language-python"><span class="n">render_header_extra_content</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16296
+
16297
+ <a href="#nautobot.apps.ui.GroupedKeyValueTablePanel.render_header_extra_content" class="headerlink" title="Permanent link">&para;</a></h3>
16298
+
16299
+
16300
+ <div class="doc doc-contents ">
16301
+
16302
+ <p>Add a "Collapse All" button to the header.</p>
16303
+
16304
+
16305
+ </div>
16306
+
16307
+ </div>
16308
+
16309
+
16310
+
16311
+ </div>
16312
+
16313
+ </div>
16314
+
16315
+ </div>
16316
+
16317
+ <div class="doc doc-object doc-class">
16318
+
16319
+
16320
+
16321
+ <h2 id="nautobot.apps.ui.HomePageBase" class="doc doc-heading">
16322
+ <code>nautobot.apps.ui.HomePageBase</code>
16323
+
16324
+
16325
+ <a href="#nautobot.apps.ui.HomePageBase" class="headerlink" title="Permanent link">&para;</a></h2>
16326
+
16327
+
16328
+ <div class="doc doc-contents ">
16329
+ <p class="doc doc-class-bases">
16330
+ Bases: <code><span title="abc.ABC">ABC</span></code></p>
16331
+
16332
+
16333
+ <p>Base class for homepage layout classes.</p>
16334
+
16335
+
15474
16336
 
15475
16337
 
15476
16338
 
@@ -15501,19 +16363,19 @@ Mutually exclusive with <code>column_headers</code>.</p>
15501
16363
 
15502
16364
 
15503
16365
 
15504
- <h2 id="nautobot.apps.ui.DropdownButton" class="doc doc-heading">
15505
- <code>nautobot.apps.ui.DropdownButton</code>
16366
+ <h2 id="nautobot.apps.ui.HomePageGroup" class="doc doc-heading">
16367
+ <code>nautobot.apps.ui.HomePageGroup</code>
15506
16368
 
15507
16369
 
15508
- <a href="#nautobot.apps.ui.DropdownButton" class="headerlink" title="Permanent link">&para;</a></h2>
16370
+ <a href="#nautobot.apps.ui.HomePageGroup" class="headerlink" title="Permanent link">&para;</a></h2>
15509
16371
 
15510
16372
 
15511
16373
  <div class="doc doc-contents ">
15512
16374
  <p class="doc doc-class-bases">
15513
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.Button (nautobot.core.ui.object_detail.Button)" href="#nautobot.apps.ui.Button">Button</a></code></p>
16375
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.HomePageBase (nautobot.core.ui.homepage.HomePageBase)" href="#nautobot.apps.ui.HomePageBase">HomePageBase</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.PermissionsMixin (nautobot.core.ui.base.PermissionsMixin)" href="#nautobot.apps.ui.PermissionsMixin">PermissionsMixin</a></code></p>
15514
16376
 
15515
16377
 
15516
- <p>A Button that has one or more other buttons as <code>children</code>, which it renders into a dropdown menu.</p>
16378
+ <p>Defines properties that can be used for a panel group.</p>
15517
16379
 
15518
16380
 
15519
16381
 
@@ -15537,15 +16399,15 @@ Mutually exclusive with <code>column_headers</code>.</p>
15537
16399
  <div class="doc doc-object doc-function">
15538
16400
 
15539
16401
 
15540
- <h3 id="nautobot.apps.ui.DropdownButton.__init__" class="doc doc-heading">
15541
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">children</span><span class="p">,</span> <span class="n">template_path</span><span class="o">=</span><span class="s1">&#39;components/button/dropdown.html&#39;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
16402
+ <h3 id="nautobot.apps.ui.HomePageGroup.__init__" class="doc doc-heading">
16403
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span></code>
15542
16404
 
15543
- <a href="#nautobot.apps.ui.DropdownButton.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
16405
+ <a href="#nautobot.apps.ui.HomePageGroup.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
15544
16406
 
15545
16407
 
15546
16408
  <div class="doc doc-contents ">
15547
16409
 
15548
- <p>Initialize a DropdownButton component.</p>
16410
+ <p>Ensure group properties.</p>
15549
16411
 
15550
16412
 
15551
16413
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -15561,34 +16423,66 @@ Mutually exclusive with <code>column_headers</code>.</p>
15561
16423
  <tbody>
15562
16424
  <tr class="doc-section-item">
15563
16425
  <td>
15564
- <code>children</code>
16426
+ <code>name</code>
16427
+ </td>
16428
+ <td>
16429
+ <code><span title="str">str</span></code>
16430
+ </td>
16431
+ <td>
16432
+ <div class="doc-md-description">
16433
+ <p>The name of the group.</p>
16434
+ </div>
16435
+ </td>
16436
+ <td>
16437
+ <em>required</em>
16438
+ </td>
16439
+ </tr>
16440
+ <tr class="doc-section-item">
16441
+ <td>
16442
+ <code>permissions</code>
16443
+ </td>
16444
+ <td>
16445
+ <code><span title="list">list</span></code>
16446
+ </td>
16447
+ <td>
16448
+ <div class="doc-md-description">
16449
+ <p>The permissions required to view this group.</p>
16450
+ </div>
16451
+ </td>
16452
+ <td>
16453
+ <code>None</code>
16454
+ </td>
16455
+ </tr>
16456
+ <tr class="doc-section-item">
16457
+ <td>
16458
+ <code>items</code>
15565
16459
  </td>
15566
16460
  <td>
15567
- <code><span title="list">list</span>[<a class="autorefs autorefs-internal" title="nautobot.apps.ui.Button (nautobot.core.ui.object_detail.Button)" href="#nautobot.apps.ui.Button">Button</a>]</code>
16461
+ <code><span title="list">list</span></code>
15568
16462
  </td>
15569
16463
  <td>
15570
16464
  <div class="doc-md-description">
15571
- <p>Elements of the dropdown menu associated to this DropdownButton.</p>
16465
+ <p>List of items to be rendered in this group.</p>
15572
16466
  </div>
15573
16467
  </td>
15574
16468
  <td>
15575
- <em>required</em>
16469
+ <code>None</code>
15576
16470
  </td>
15577
16471
  </tr>
15578
16472
  <tr class="doc-section-item">
15579
16473
  <td>
15580
- <code>template_path</code>
16474
+ <code>weight</code>
15581
16475
  </td>
15582
16476
  <td>
15583
- <code><span title="str">str</span></code>
16477
+ <code><span title="int">int</span></code>
15584
16478
  </td>
15585
16479
  <td>
15586
16480
  <div class="doc-md-description">
15587
- <p>Dropdown-specific template file.</p>
16481
+ <p>The weight of this group.</p>
15588
16482
  </div>
15589
16483
  </td>
15590
16484
  <td>
15591
- <code>&#39;components/button/dropdown.html&#39;</code>
16485
+ <code>1000</code>
15592
16486
  </td>
15593
16487
  </tr>
15594
16488
  </tbody>
@@ -15599,24 +16493,6 @@ Mutually exclusive with <code>column_headers</code>.</p>
15599
16493
 
15600
16494
  </div>
15601
16495
 
15602
- <div class="doc doc-object doc-function">
15603
-
15604
-
15605
- <h3 id="nautobot.apps.ui.DropdownButton.get_extra_context" class="doc doc-heading">
15606
- <code class="highlight language-python"><span class="n">get_extra_context</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
15607
-
15608
- <a href="#nautobot.apps.ui.DropdownButton.get_extra_context" class="headerlink" title="Permanent link">&para;</a></h3>
15609
-
15610
-
15611
- <div class="doc doc-contents ">
15612
-
15613
- <p>Add the children of this DropdownButton to the other Button context.</p>
15614
-
15615
-
15616
- </div>
15617
-
15618
- </div>
15619
-
15620
16496
 
15621
16497
 
15622
16498
  </div>
@@ -15629,21 +16505,19 @@ Mutually exclusive with <code>column_headers</code>.</p>
15629
16505
 
15630
16506
 
15631
16507
 
15632
- <h2 id="nautobot.apps.ui.GroupedKeyValueTablePanel" class="doc doc-heading">
15633
- <code>nautobot.apps.ui.GroupedKeyValueTablePanel</code>
16508
+ <h2 id="nautobot.apps.ui.HomePageItem" class="doc doc-heading">
16509
+ <code>nautobot.apps.ui.HomePageItem</code>
15634
16510
 
15635
16511
 
15636
- <a href="#nautobot.apps.ui.GroupedKeyValueTablePanel" class="headerlink" title="Permanent link">&para;</a></h2>
16512
+ <a href="#nautobot.apps.ui.HomePageItem" class="headerlink" title="Permanent link">&para;</a></h2>
15637
16513
 
15638
16514
 
15639
16515
  <div class="doc doc-contents ">
15640
16516
  <p class="doc doc-class-bases">
15641
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.KeyValueTablePanel (nautobot.core.ui.object_detail.KeyValueTablePanel)" href="#nautobot.apps.ui.KeyValueTablePanel">KeyValueTablePanel</a></code></p>
16517
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.HomePageBase (nautobot.core.ui.homepage.HomePageBase)" href="#nautobot.apps.ui.HomePageBase">HomePageBase</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.PermissionsMixin (nautobot.core.ui.base.PermissionsMixin)" href="#nautobot.apps.ui.PermissionsMixin">PermissionsMixin</a></code></p>
15642
16518
 
15643
16519
 
15644
- <p>A KeyValueTablePanel that displays its data within collapsible accordion groupings, such as object custom fields.</p>
15645
- <p>Expects data in the form <code>{grouping1: {key1: value1, key2: value2, ...}, grouping2: {...}, ...}</code>.</p>
15646
- <p>The special grouping <code>""</code> may be used to indicate top-level key/value pairs that don't belong to a group.</p>
16520
+ <p>Defines properties that can be used for a panel item.</p>
15647
16521
 
15648
16522
 
15649
16523
 
@@ -15667,84 +16541,116 @@ Mutually exclusive with <code>column_headers</code>.</p>
15667
16541
  <div class="doc doc-object doc-function">
15668
16542
 
15669
16543
 
15670
- <h3 id="nautobot.apps.ui.GroupedKeyValueTablePanel.render_body_content" class="doc doc-heading">
15671
- <code class="highlight language-python"><span class="n">render_body_content</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
15672
-
15673
- <a href="#nautobot.apps.ui.GroupedKeyValueTablePanel.render_body_content" class="headerlink" title="Permanent link">&para;</a></h3>
15674
-
15675
-
15676
- <div class="doc doc-contents ">
15677
-
15678
- <p>Render groups of key-value pairs to HTML.</p>
15679
-
15680
-
15681
- </div>
15682
-
15683
- </div>
15684
-
15685
- <div class="doc doc-object doc-function">
15686
-
15687
-
15688
- <h3 id="nautobot.apps.ui.GroupedKeyValueTablePanel.render_header_extra_content" class="doc doc-heading">
15689
- <code class="highlight language-python"><span class="n">render_header_extra_content</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16544
+ <h3 id="nautobot.apps.ui.HomePageItem.__init__" class="doc doc-heading">
16545
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">link</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span></code>
15690
16546
 
15691
- <a href="#nautobot.apps.ui.GroupedKeyValueTablePanel.render_header_extra_content" class="headerlink" title="Permanent link">&para;</a></h3>
16547
+ <a href="#nautobot.apps.ui.HomePageItem.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
15692
16548
 
15693
16549
 
15694
16550
  <div class="doc doc-contents ">
15695
16551
 
15696
- <p>Add a "Collapse All" button to the header.</p>
15697
-
15698
-
15699
- </div>
15700
-
15701
- </div>
16552
+ <p>Ensure item properties.</p>
15702
16553
 
15703
16554
 
16555
+ <p><span class="doc-section-title">Parameters:</span></p>
16556
+ <table>
16557
+ <thead>
16558
+ <tr>
16559
+ <th>Name</th>
16560
+ <th>Type</th>
16561
+ <th>Description</th>
16562
+ <th>Default</th>
16563
+ </tr>
16564
+ </thead>
16565
+ <tbody>
16566
+ <tr class="doc-section-item">
16567
+ <td>
16568
+ <code>name</code>
16569
+ </td>
16570
+ <td>
16571
+ <code><span title="str">str</span></code>
16572
+ </td>
16573
+ <td>
16574
+ <div class="doc-md-description">
16575
+ <p>The name of the item.</p>
16576
+ </div>
16577
+ </td>
16578
+ <td>
16579
+ <em>required</em>
16580
+ </td>
16581
+ </tr>
16582
+ <tr class="doc-section-item">
16583
+ <td>
16584
+ <code>link</code>
16585
+ </td>
16586
+ <td>
16587
+ <code><span title="str">str</span></code>
16588
+ </td>
16589
+ <td>
16590
+ <div class="doc-md-description">
16591
+ <p>The link to be used for this item.</p>
16592
+ </div>
16593
+ </td>
16594
+ <td>
16595
+ <code>None</code>
16596
+ </td>
16597
+ </tr>
16598
+ <tr class="doc-section-item">
16599
+ <td>
16600
+ <code>model</code>
16601
+ </td>
16602
+ <td>
16603
+ <code><span title="str">str</span></code>
16604
+ </td>
16605
+ <td>
16606
+ <div class="doc-md-description">
16607
+ <p>The model to being used for this item to calculate the total count of objects.</p>
16608
+ </div>
16609
+ </td>
16610
+ <td>
16611
+ <code>None</code>
16612
+ </td>
16613
+ </tr>
16614
+ <tr class="doc-section-item">
16615
+ <td>
16616
+ <code>custom_template</code>
16617
+ </td>
16618
+ <td>
16619
+ <code><span title="str">str</span></code>
16620
+ </td>
16621
+ <td>
16622
+ <div class="doc-md-description">
16623
+ <p>Name of custom template.</p>
16624
+ </div>
16625
+ </td>
16626
+ <td>
16627
+ <code>None</code>
16628
+ </td>
16629
+ </tr>
16630
+ <tr class="doc-section-item">
16631
+ <td>
16632
+ <code>custom_data</code>
16633
+ </td>
16634
+ <td>
16635
+ <code><span title="dict">dict</span></code>
16636
+ </td>
16637
+ <td>
16638
+ <div class="doc-md-description">
16639
+ <p>Custom data to be passed to the custom template.</p>
16640
+ </div>
16641
+ </td>
16642
+ <td>
16643
+ <code>None</code>
16644
+ </td>
16645
+ </tr>
16646
+ </tbody>
16647
+ </table>
15704
16648
 
15705
- </div>
15706
16649
 
15707
16650
  </div>
15708
16651
 
15709
16652
  </div>
15710
16653
 
15711
- <div class="doc doc-object doc-class">
15712
-
15713
-
15714
-
15715
- <h2 id="nautobot.apps.ui.HomePageBase" class="doc doc-heading">
15716
- <code>nautobot.apps.ui.HomePageBase</code>
15717
-
15718
-
15719
- <a href="#nautobot.apps.ui.HomePageBase" class="headerlink" title="Permanent link">&para;</a></h2>
15720
-
15721
-
15722
- <div class="doc doc-contents ">
15723
- <p class="doc doc-class-bases">
15724
- Bases: <code><span title="abc.ABC">ABC</span></code></p>
15725
-
15726
-
15727
- <p>Base class for homepage layout classes.</p>
15728
-
15729
-
15730
-
15731
-
15732
-
15733
-
15734
-
15735
-
15736
-
15737
-
15738
- <div class="doc doc-children">
15739
-
15740
-
15741
-
15742
-
15743
-
15744
-
15745
-
15746
-
15747
-
15748
16654
 
15749
16655
 
15750
16656
  </div>
@@ -15757,11 +16663,11 @@ Mutually exclusive with <code>column_headers</code>.</p>
15757
16663
 
15758
16664
 
15759
16665
 
15760
- <h2 id="nautobot.apps.ui.HomePageGroup" class="doc doc-heading">
15761
- <code>nautobot.apps.ui.HomePageGroup</code>
16666
+ <h2 id="nautobot.apps.ui.HomePagePanel" class="doc doc-heading">
16667
+ <code>nautobot.apps.ui.HomePagePanel</code>
15762
16668
 
15763
16669
 
15764
- <a href="#nautobot.apps.ui.HomePageGroup" class="headerlink" title="Permanent link">&para;</a></h2>
16670
+ <a href="#nautobot.apps.ui.HomePagePanel" class="headerlink" title="Permanent link">&para;</a></h2>
15765
16671
 
15766
16672
 
15767
16673
  <div class="doc doc-contents ">
@@ -15769,7 +16675,7 @@ Mutually exclusive with <code>column_headers</code>.</p>
15769
16675
  Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.HomePageBase (nautobot.core.ui.homepage.HomePageBase)" href="#nautobot.apps.ui.HomePageBase">HomePageBase</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.PermissionsMixin (nautobot.core.ui.base.PermissionsMixin)" href="#nautobot.apps.ui.PermissionsMixin">PermissionsMixin</a></code></p>
15770
16676
 
15771
16677
 
15772
- <p>Defines properties that can be used for a panel group.</p>
16678
+ <p>Defines properties that can be used for a panel.</p>
15773
16679
 
15774
16680
 
15775
16681
 
@@ -15793,15 +16699,15 @@ Mutually exclusive with <code>column_headers</code>.</p>
15793
16699
  <div class="doc doc-object doc-function">
15794
16700
 
15795
16701
 
15796
- <h3 id="nautobot.apps.ui.HomePageGroup.__init__" class="doc doc-heading">
15797
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span></code>
16702
+ <h3 id="nautobot.apps.ui.HomePagePanel.__init__" class="doc doc-heading">
16703
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span></code>
15798
16704
 
15799
- <a href="#nautobot.apps.ui.HomePageGroup.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
16705
+ <a href="#nautobot.apps.ui.HomePagePanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
15800
16706
 
15801
16707
 
15802
16708
  <div class="doc doc-contents ">
15803
16709
 
15804
- <p>Ensure group properties.</p>
16710
+ <p>Ensure panel properties.</p>
15805
16711
 
15806
16712
 
15807
16713
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -15824,7 +16730,7 @@ Mutually exclusive with <code>column_headers</code>.</p>
15824
16730
  </td>
15825
16731
  <td>
15826
16732
  <div class="doc-md-description">
15827
- <p>The name of the group.</p>
16733
+ <p>The name of the panel.</p>
15828
16734
  </div>
15829
16735
  </td>
15830
16736
  <td>
@@ -15840,7 +16746,39 @@ Mutually exclusive with <code>column_headers</code>.</p>
15840
16746
  </td>
15841
16747
  <td>
15842
16748
  <div class="doc-md-description">
15843
- <p>The permissions required to view this group.</p>
16749
+ <p>The permissions required to view this panel.</p>
16750
+ </div>
16751
+ </td>
16752
+ <td>
16753
+ <code>None</code>
16754
+ </td>
16755
+ </tr>
16756
+ <tr class="doc-section-item">
16757
+ <td>
16758
+ <code>custom_data</code>
16759
+ </td>
16760
+ <td>
16761
+ <code><span title="dict">dict</span></code>
16762
+ </td>
16763
+ <td>
16764
+ <div class="doc-md-description">
16765
+ <p>Custom data to be passed to the custom template.</p>
16766
+ </div>
16767
+ </td>
16768
+ <td>
16769
+ <code>None</code>
16770
+ </td>
16771
+ </tr>
16772
+ <tr class="doc-section-item">
16773
+ <td>
16774
+ <code>custom_template</code>
16775
+ </td>
16776
+ <td>
16777
+ <code><span title="str">str</span></code>
16778
+ </td>
16779
+ <td>
16780
+ <div class="doc-md-description">
16781
+ <p>Name of custom template.</p>
15844
16782
  </div>
15845
16783
  </td>
15846
16784
  <td>
@@ -15856,7 +16794,7 @@ Mutually exclusive with <code>column_headers</code>.</p>
15856
16794
  </td>
15857
16795
  <td>
15858
16796
  <div class="doc-md-description">
15859
- <p>List of items to be rendered in this group.</p>
16797
+ <p>List of items to be rendered in this panel.</p>
15860
16798
  </div>
15861
16799
  </td>
15862
16800
  <td>
@@ -15872,7 +16810,7 @@ Mutually exclusive with <code>column_headers</code>.</p>
15872
16810
  </td>
15873
16811
  <td>
15874
16812
  <div class="doc-md-description">
15875
- <p>The weight of this group.</p>
16813
+ <p>The weight of this panel.</p>
15876
16814
  </div>
15877
16815
  </td>
15878
16816
  <td>
@@ -15899,209 +16837,283 @@ Mutually exclusive with <code>column_headers</code>.</p>
15899
16837
 
15900
16838
 
15901
16839
 
15902
- <h2 id="nautobot.apps.ui.HomePageItem" class="doc doc-heading">
15903
- <code>nautobot.apps.ui.HomePageItem</code>
16840
+ <h2 id="nautobot.apps.ui.InstanceBreadcrumbItem" class="doc doc-heading">
16841
+ <code>nautobot.apps.ui.InstanceBreadcrumbItem</code>
15904
16842
 
15905
16843
 
15906
- <a href="#nautobot.apps.ui.HomePageItem" class="headerlink" title="Permanent link">&para;</a></h2>
16844
+ <span class="doc doc-labels">
16845
+ <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
16846
+ </span>
16847
+
16848
+ <a href="#nautobot.apps.ui.InstanceBreadcrumbItem" class="headerlink" title="Permanent link">&para;</a></h2>
15907
16849
 
15908
16850
 
15909
16851
  <div class="doc doc-contents ">
15910
16852
  <p class="doc doc-class-bases">
15911
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.HomePageBase (nautobot.core.ui.homepage.HomePageBase)" href="#nautobot.apps.ui.HomePageBase">HomePageBase</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.PermissionsMixin (nautobot.core.ui.base.PermissionsMixin)" href="#nautobot.apps.ui.PermissionsMixin">PermissionsMixin</a></code></p>
15912
-
15913
-
15914
- <p>Defines properties that can be used for a panel item.</p>
15915
-
15916
-
15917
-
15918
-
15919
-
15920
-
15921
-
15922
-
15923
-
15924
-
15925
- <div class="doc doc-children">
15926
-
15927
-
15928
-
15929
-
15930
-
15931
-
15932
-
15933
-
15934
-
15935
- <div class="doc doc-object doc-function">
15936
-
15937
-
15938
- <h3 id="nautobot.apps.ui.HomePageItem.__init__" class="doc doc-heading">
15939
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">link</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span></code>
16853
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
15940
16854
 
15941
- <a href="#nautobot.apps.ui.HomePageItem.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
15942
16855
 
16856
+
16857
+ dataclass
16858
+ (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a></code></p>
15943
16859
 
15944
- <div class="doc doc-contents ">
15945
16860
 
15946
- <p>Ensure item properties.</p>
16861
+ <p>Breadcrumb via object instance from context.</p>
16862
+ <p>Detail url for object instance taken from context. By default, <code>instance_key</code> is set to <code>object</code>.
16863
+ Label will be generated from object, but you can still override it.</p>
15947
16864
 
15948
16865
 
15949
- <p><span class="doc-section-title">Parameters:</span></p>
16866
+ <p><span class="doc-section-title">Attributes:</span></p>
15950
16867
  <table>
15951
16868
  <thead>
15952
16869
  <tr>
15953
16870
  <th>Name</th>
15954
16871
  <th>Type</th>
15955
16872
  <th>Description</th>
15956
- <th>Default</th>
15957
16873
  </tr>
15958
16874
  </thead>
15959
16875
  <tbody>
15960
16876
  <tr class="doc-section-item">
16877
+ <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.instance_key">instance_key</span></code></td>
15961
16878
  <td>
15962
- <code>name</code>
15963
- </td>
15964
- <td>
15965
- <code><span title="str">str</span></code>
16879
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
15966
16880
  </td>
15967
16881
  <td>
15968
16882
  <div class="doc-md-description">
15969
- <p>The name of the item.</p>
16883
+ <p>Context key to fetch a Django model instance for building the breadcrumb. Default: "object".</p>
15970
16884
  </div>
15971
16885
  </td>
15972
- <td>
15973
- <em>required</em>
15974
- </td>
15975
16886
  </tr>
15976
16887
  <tr class="doc-section-item">
16888
+ <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.instance">instance</span></code></td>
15977
16889
  <td>
15978
- <code>link</code>
15979
- </td>
15980
- <td>
15981
- <code><span title="str">str</span></code>
16890
+ <code><span title="typing.Union">Union</span>[<span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="typing.Optional">Optional</span>[<span title="django.db.models.Model">Model</span>]], <span title="django.db.models.Model">Model</span>, None]</code>
15982
16891
  </td>
15983
16892
  <td>
15984
16893
  <div class="doc-md-description">
15985
- <p>The link to be used for this item.</p>
16894
+ <p>Callable to fetch the instance from context. If</p>
15986
16895
  </div>
15987
16896
  </td>
15988
- <td>
15989
- <code>None</code>
15990
- </td>
15991
16897
  </tr>
15992
16898
  <tr class="doc-section-item">
16899
+ <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.should_render">should_render</span></code></td>
15993
16900
  <td>
15994
- <code>model</code>
15995
- </td>
15996
- <td>
15997
- <code><span title="str">str</span></code>
16901
+ <code><span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="bool">bool</span>]</code>
15998
16902
  </td>
15999
16903
  <td>
16000
16904
  <div class="doc-md-description">
16001
- <p>The model to being used for this item to calculate the total count of objects.</p>
16905
+ <p>Callable to decide whether this item should be rendered or not.</p>
16002
16906
  </div>
16003
16907
  </td>
16004
- <td>
16005
- <code>None</code>
16006
- </td>
16007
16908
  </tr>
16008
16909
  <tr class="doc-section-item">
16910
+ <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.label">label</span></code></td>
16009
16911
  <td>
16010
- <code>custom_template</code>
16011
- </td>
16012
- <td>
16013
- <code><span title="str">str</span></code>
16912
+ <code><span title="typing.Union">Union</span>[<span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="str">str</span>], <span title="nautobot.core.ui.breadcrumbs.WithStr">WithStr</span>, None]</code>
16014
16913
  </td>
16015
16914
  <td>
16016
16915
  <div class="doc-md-description">
16017
- <p>Name of custom template.</p>
16916
+ <p>Optional override for the display label in the breadcrumb.</p>
16018
16917
  </div>
16019
16918
  </td>
16020
- <td>
16021
- <code>None</code>
16022
- </td>
16023
16919
  </tr>
16024
16920
  <tr class="doc-section-item">
16921
+ <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.label_key">label_key</span></code></td>
16025
16922
  <td>
16026
- <code>custom_data</code>
16027
- </td>
16028
- <td>
16029
- <code><span title="dict">dict</span></code>
16923
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
16030
16924
  </td>
16031
16925
  <td>
16032
16926
  <div class="doc-md-description">
16033
- <p>Custom data to be passed to the custom template.</p>
16927
+ <p>Optional key to take label from the context.</p>
16034
16928
  </div>
16035
16929
  </td>
16036
- <td>
16037
- <code>None</code>
16038
- </td>
16039
16930
  </tr>
16040
16931
  </tbody>
16041
16932
  </table>
16042
16933
 
16043
16934
 
16044
- </div>
16935
+ <p><span class="doc-section-title">Examples:</span></p>
16936
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">InstanceBreadcrumbItem</span><span class="p">()</span>
16937
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="go">(&quot;/dcim/devices/1234&quot;, &quot;My Device&quot;) # Assuming that under &quot;object&quot; there is a Device instance</span>
16938
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">InstanceBreadcrumbItem</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">&quot;Custom Device Label&quot;</span><span class="p">)</span>
16939
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="go">(&quot;/dcim/devices/1234&quot;, &quot;Custom Device Label&quot;) # Assuming that under &quot;object&quot; there is a Device instance</span>
16940
+ </code></pre></div>
16045
16941
 
16046
- </div>
16047
16942
 
16048
16943
 
16049
16944
 
16050
- </div>
16051
16945
 
16052
- </div>
16053
16946
 
16054
- </div>
16055
16947
 
16056
- <div class="doc doc-object doc-class">
16057
16948
 
16058
16949
 
16059
16950
 
16060
- <h2 id="nautobot.apps.ui.HomePagePanel" class="doc doc-heading">
16061
- <code>nautobot.apps.ui.HomePagePanel</code>
16951
+ <div class="doc doc-children">
16952
+
16062
16953
 
16063
16954
 
16064
- <a href="#nautobot.apps.ui.HomePagePanel" class="headerlink" title="Permanent link">&para;</a></h2>
16955
+
16956
+
16957
+
16958
+
16959
+
16960
+
16961
+ <div class="doc doc-object doc-function">
16962
+
16963
+
16964
+ <h3 id="nautobot.apps.ui.InstanceBreadcrumbItem.get_instance" class="doc doc-heading">
16965
+ <code class="highlight language-python"><span class="n">get_instance</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16966
+
16967
+ <a href="#nautobot.apps.ui.InstanceBreadcrumbItem.get_instance" class="headerlink" title="Permanent link">&para;</a></h3>
16065
16968
 
16066
16969
 
16067
16970
  <div class="doc doc-contents ">
16068
- <p class="doc doc-class-bases">
16069
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.HomePageBase (nautobot.core.ui.homepage.HomePageBase)" href="#nautobot.apps.ui.HomePageBase">HomePageBase</a></code>, <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.PermissionsMixin (nautobot.core.ui.base.PermissionsMixin)" href="#nautobot.apps.ui.PermissionsMixin">PermissionsMixin</a></code></p>
16971
+
16972
+ <p>Get the instance depending on the settings.</p>
16070
16973
 
16071
16974
 
16072
- <p>Defines properties that can be used for a panel.</p>
16975
+ <p><span class="doc-section-title">Parameters:</span></p>
16976
+ <table>
16977
+ <thead>
16978
+ <tr>
16979
+ <th>Name</th>
16980
+ <th>Type</th>
16981
+ <th>Description</th>
16982
+ <th>Default</th>
16983
+ </tr>
16984
+ </thead>
16985
+ <tbody>
16986
+ <tr class="doc-section-item">
16987
+ <td>
16988
+ <code>context</code>
16989
+ </td>
16990
+ <td>
16991
+ <code><span title="django.template.Context">Context</span></code>
16992
+ </td>
16993
+ <td>
16994
+ <div class="doc-md-description">
16995
+ <p>The current template context.</p>
16996
+ </div>
16997
+ </td>
16998
+ <td>
16999
+ <em>required</em>
17000
+ </td>
17001
+ </tr>
17002
+ </tbody>
17003
+ </table>
17004
+
16073
17005
 
17006
+ <p><span class="doc-section-title">Returns:</span></p>
17007
+ <table>
17008
+ <thead>
17009
+ <tr>
17010
+ <th>Type</th>
17011
+ <th>Description</th>
17012
+ </tr>
17013
+ </thead>
17014
+ <tbody>
17015
+ <tr class="doc-section-item">
17016
+ <td>
17017
+ <code><span title="typing.Optional">Optional</span>[<span title="django.db.models.Model">Model</span>]</code>
17018
+ </td>
17019
+ <td>
17020
+ <div class="doc-md-description">
17021
+ <p>Optional[Model]: Instance from context.</p>
17022
+ </div>
17023
+ </td>
17024
+ </tr>
17025
+ </tbody>
17026
+ </table>
16074
17027
 
16075
17028
 
17029
+ </div>
16076
17030
 
17031
+ </div>
16077
17032
 
17033
+ <div class="doc doc-object doc-function">
16078
17034
 
16079
17035
 
17036
+ <h3 id="nautobot.apps.ui.InstanceBreadcrumbItem.get_label" class="doc doc-heading">
17037
+ <code class="highlight language-python"><span class="n">get_label</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16080
17038
 
17039
+ <a href="#nautobot.apps.ui.InstanceBreadcrumbItem.get_label" class="headerlink" title="Permanent link">&para;</a></h3>
16081
17040
 
16082
17041
 
16083
- <div class="doc doc-children">
17042
+ <div class="doc doc-contents ">
16084
17043
 
17044
+ <p>Get the label (display text) for the breadcrumb from instance.</p>
16085
17045
 
16086
17046
 
17047
+ <p><span class="doc-section-title">Parameters:</span></p>
17048
+ <table>
17049
+ <thead>
17050
+ <tr>
17051
+ <th>Name</th>
17052
+ <th>Type</th>
17053
+ <th>Description</th>
17054
+ <th>Default</th>
17055
+ </tr>
17056
+ </thead>
17057
+ <tbody>
17058
+ <tr class="doc-section-item">
17059
+ <td>
17060
+ <code>context</code>
17061
+ </td>
17062
+ <td>
17063
+ <code><span title="django.template.Context">Context</span></code>
17064
+ </td>
17065
+ <td>
17066
+ <div class="doc-md-description">
17067
+ <p>The current template context.</p>
17068
+ </div>
17069
+ </td>
17070
+ <td>
17071
+ <em>required</em>
17072
+ </td>
17073
+ </tr>
17074
+ </tbody>
17075
+ </table>
16087
17076
 
16088
17077
 
17078
+ <p><span class="doc-section-title">Returns:</span></p>
17079
+ <table>
17080
+ <thead>
17081
+ <tr>
17082
+ <th>Name</th> <th>Type</th>
17083
+ <th>Description</th>
17084
+ </tr>
17085
+ </thead>
17086
+ <tbody>
17087
+ <tr class="doc-section-item">
17088
+ <td><code>str</code></td> <td>
17089
+ <code><span title="str">str</span></code>
17090
+ </td>
17091
+ <td>
17092
+ <div class="doc-md-description">
17093
+ <p>Label as a string.</p>
17094
+ </div>
17095
+ </td>
17096
+ </tr>
17097
+ </tbody>
17098
+ </table>
16089
17099
 
16090
17100
 
17101
+ </div>
16091
17102
 
17103
+ </div>
16092
17104
 
16093
17105
  <div class="doc doc-object doc-function">
16094
17106
 
16095
17107
 
16096
- <h3 id="nautobot.apps.ui.HomePagePanel.__init__" class="doc doc-heading">
16097
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">custom_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">items</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span></code>
17108
+ <h3 id="nautobot.apps.ui.InstanceBreadcrumbItem.get_url" class="doc doc-heading">
17109
+ <code class="highlight language-python"><span class="n">get_url</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16098
17110
 
16099
- <a href="#nautobot.apps.ui.HomePagePanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
17111
+ <a href="#nautobot.apps.ui.InstanceBreadcrumbItem.get_url" class="headerlink" title="Permanent link">&para;</a></h3>
16100
17112
 
16101
17113
 
16102
17114
  <div class="doc doc-contents ">
16103
17115
 
16104
- <p>Ensure panel properties.</p>
17116
+ <p>Resolve the URL for the breadcrumb item based on the instance.</p>
16105
17117
 
16106
17118
 
16107
17119
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -16117,99 +17129,42 @@ Mutually exclusive with <code>column_headers</code>.</p>
16117
17129
  <tbody>
16118
17130
  <tr class="doc-section-item">
16119
17131
  <td>
16120
- <code>name</code>
17132
+ <code>context</code>
16121
17133
  </td>
16122
17134
  <td>
16123
- <code><span title="str">str</span></code>
17135
+ <code><span title="django.template.Context">Context</span></code>
16124
17136
  </td>
16125
17137
  <td>
16126
17138
  <div class="doc-md-description">
16127
- <p>The name of the panel.</p>
17139
+ <p>The current template context.</p>
16128
17140
  </div>
16129
17141
  </td>
16130
17142
  <td>
16131
17143
  <em>required</em>
16132
17144
  </td>
16133
17145
  </tr>
17146
+ </tbody>
17147
+ </table>
17148
+
17149
+
17150
+ <p><span class="doc-section-title">Returns:</span></p>
17151
+ <table>
17152
+ <thead>
17153
+ <tr>
17154
+ <th>Type</th>
17155
+ <th>Description</th>
17156
+ </tr>
17157
+ </thead>
17158
+ <tbody>
16134
17159
  <tr class="doc-section-item">
16135
17160
  <td>
16136
- <code>permissions</code>
16137
- </td>
16138
- <td>
16139
- <code><span title="list">list</span></code>
16140
- </td>
16141
- <td>
16142
- <div class="doc-md-description">
16143
- <p>The permissions required to view this panel.</p>
16144
- </div>
16145
- </td>
16146
- <td>
16147
- <code>None</code>
16148
- </td>
16149
- </tr>
16150
- <tr class="doc-section-item">
16151
- <td>
16152
- <code>custom_data</code>
16153
- </td>
16154
- <td>
16155
- <code><span title="dict">dict</span></code>
16156
- </td>
16157
- <td>
16158
- <div class="doc-md-description">
16159
- <p>Custom data to be passed to the custom template.</p>
16160
- </div>
16161
- </td>
16162
- <td>
16163
- <code>None</code>
16164
- </td>
16165
- </tr>
16166
- <tr class="doc-section-item">
16167
- <td>
16168
- <code>custom_template</code>
16169
- </td>
16170
- <td>
16171
- <code><span title="str">str</span></code>
16172
- </td>
16173
- <td>
16174
- <div class="doc-md-description">
16175
- <p>Name of custom template.</p>
16176
- </div>
16177
- </td>
16178
- <td>
16179
- <code>None</code>
16180
- </td>
16181
- </tr>
16182
- <tr class="doc-section-item">
16183
- <td>
16184
- <code>items</code>
16185
- </td>
16186
- <td>
16187
- <code><span title="list">list</span></code>
16188
- </td>
16189
- <td>
16190
- <div class="doc-md-description">
16191
- <p>List of items to be rendered in this panel.</p>
16192
- </div>
16193
- </td>
16194
- <td>
16195
- <code>None</code>
16196
- </td>
16197
- </tr>
16198
- <tr class="doc-section-item">
16199
- <td>
16200
- <code>weight</code>
16201
- </td>
16202
- <td>
16203
- <code><span title="int">int</span></code>
17161
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
16204
17162
  </td>
16205
17163
  <td>
16206
17164
  <div class="doc-md-description">
16207
- <p>The weight of this panel.</p>
17165
+ <p>Optional[str]: The URL as a string, or None.</p>
16208
17166
  </div>
16209
17167
  </td>
16210
- <td>
16211
- <code>1000</code>
16212
- </td>
16213
17168
  </tr>
16214
17169
  </tbody>
16215
17170
  </table>
@@ -16231,30 +17186,29 @@ Mutually exclusive with <code>column_headers</code>.</p>
16231
17186
 
16232
17187
 
16233
17188
 
16234
- <h2 id="nautobot.apps.ui.InstanceBreadcrumbItem" class="doc doc-heading">
16235
- <code>nautobot.apps.ui.InstanceBreadcrumbItem</code>
17189
+ <h2 id="nautobot.apps.ui.InstanceParentBreadcrumbItem" class="doc doc-heading">
17190
+ <code>nautobot.apps.ui.InstanceParentBreadcrumbItem</code>
16236
17191
 
16237
17192
 
16238
17193
  <span class="doc doc-labels">
16239
17194
  <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
16240
17195
  </span>
16241
17196
 
16242
- <a href="#nautobot.apps.ui.InstanceBreadcrumbItem" class="headerlink" title="Permanent link">&para;</a></h2>
17197
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem" class="headerlink" title="Permanent link">&para;</a></h2>
16243
17198
 
16244
17199
 
16245
17200
  <div class="doc doc-contents ">
16246
17201
  <p class="doc doc-class-bases">
16247
- Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.BaseBreadcrumbItem
17202
+ Bases: <code><a class="autorefs autorefs-internal" title="nautobot.apps.ui.InstanceBreadcrumbItem
16248
17203
 
16249
17204
 
16250
17205
 
16251
17206
  dataclass
16252
- (nautobot.core.ui.breadcrumbs.BaseBreadcrumbItem)" href="#nautobot.apps.ui.BaseBreadcrumbItem">BaseBreadcrumbItem</a></code></p>
17207
+ (nautobot.core.ui.breadcrumbs.InstanceBreadcrumbItem)" href="#nautobot.apps.ui.InstanceBreadcrumbItem">InstanceBreadcrumbItem</a></code></p>
16253
17208
 
16254
17209
 
16255
- <p>Breadcrumb via object instance from context.</p>
16256
- <p>Detail url for object instance taken from context. By default, <code>instance_key</code> is set to <code>object</code>.
16257
- Label will be generated from object, but you can still override it.</p>
17210
+ <p>Breadcrumb item prepared to be "parent" or "group" of given model.</p>
17211
+ <p>It will create a breadcrumb item to the object list but will try to filter it by given parent.</p>
16258
17212
 
16259
17213
 
16260
17214
  <p><span class="doc-section-title">Attributes:</span></p>
@@ -16268,57 +17222,35 @@ Label will be generated from object, but you can still override it.</p>
16268
17222
  </thead>
16269
17223
  <tbody>
16270
17224
  <tr class="doc-section-item">
16271
- <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.instance_key">instance_key</span></code></td>
16272
- <td>
16273
- <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
16274
- </td>
16275
- <td>
16276
- <div class="doc-md-description">
16277
- <p>Context key to fetch a Django model instance for building the breadcrumb.</p>
16278
- </div>
16279
- </td>
16280
- </tr>
16281
- <tr class="doc-section-item">
16282
- <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.instance">instance</span></code></td>
16283
- <td>
16284
- <code>Callable[[Context], Optional[Model]</code>
16285
- </td>
16286
- <td>
16287
- <div class="doc-md-description">
16288
- <p>Callable to fetch the instance from context. If</p>
16289
- </div>
16290
- </td>
16291
- </tr>
16292
- <tr class="doc-section-item">
16293
- <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.should_render">should_render</span></code></td>
17225
+ <td><code><span title="nautobot.apps.ui.InstanceParentBreadcrumbItem.parent_key">parent_key</span></code></td>
16294
17226
  <td>
16295
- <code><span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="bool">bool</span>]</code>
17227
+ <code><span title="str">str</span></code>
16296
17228
  </td>
16297
17229
  <td>
16298
17230
  <div class="doc-md-description">
16299
- <p>Callable to decide whether this item should be rendered or not.</p>
17231
+ <p>Instance attribute to get the parent instance. Default: "parent".</p>
16300
17232
  </div>
16301
17233
  </td>
16302
17234
  </tr>
16303
17235
  <tr class="doc-section-item">
16304
- <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.label">label</span></code></td>
17236
+ <td><code><span title="nautobot.apps.ui.InstanceParentBreadcrumbItem.parent_query_param">parent_query_param</span></code></td>
16305
17237
  <td>
16306
- <code><span title="typing.Union">Union</span>[<span title="typing.Callable">Callable</span>[[<span title="django.template.Context">Context</span>], <span title="str">str</span>], <span title="nautobot.core.ui.breadcrumbs.WithStr">WithStr</span>, None]</code>
17238
+ <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
16307
17239
  </td>
16308
17240
  <td>
16309
17241
  <div class="doc-md-description">
16310
- <p>Optional override for the display label in the breadcrumb.</p>
17242
+ <p>Query param name under which parent lookup key will be added into breadcrumb url. If None, will be the same as <code>parent_key</code>.</p>
16311
17243
  </div>
16312
17244
  </td>
16313
17245
  </tr>
16314
17246
  <tr class="doc-section-item">
16315
- <td><code><span title="nautobot.apps.ui.InstanceBreadcrumbItem.label_key">label_key</span></code></td>
17247
+ <td><code><span title="nautobot.apps.ui.InstanceParentBreadcrumbItem.parent_lookup_key">parent_lookup_key</span></code></td>
16316
17248
  <td>
16317
17249
  <code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
16318
17250
  </td>
16319
17251
  <td>
16320
17252
  <div class="doc-md-description">
16321
- <p>Optional key to take label from the context.</p>
17253
+ <p>Parent attribute which will be used to build the url and filter the instance list url. Can be set to None to use parent as key.</p>
16322
17254
  </div>
16323
17255
  </td>
16324
17256
  </tr>
@@ -16327,10 +17259,10 @@ Label will be generated from object, but you can still override it.</p>
16327
17259
 
16328
17260
 
16329
17261
  <p><span class="doc-section-title">Examples:</span></p>
16330
- <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">InstanceBreadcrumbItem</span><span class="p">()</span>
16331
- <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="go">(&quot;/dcim/devices/1234&quot;, &quot;My Device&quot;) # Assuming that under &quot;object&quot; there is a Device instance</span>
16332
- <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">InstanceBreadcrumbItem</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="s2">&quot;Custom Device Label&quot;</span><span class="p">)</span>
16333
- <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="go">(&quot;/dcim/devices/1234&quot;, &quot;Custom Device Label&quot;) # Assuming that under &quot;object&quot; there is a Device instance</span>
17262
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">InstanceParentBreadcrumbItem</span><span class="p">()</span>
17263
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="go">(&quot;/dcim/devices?parent=&lt;parent.pk&gt;&quot;, &quot;Parent&quot;) # Assuming that under &quot;object&quot; there is a Device instance and has &quot;parent&quot;</span>
17264
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">InstanceParentBreadcrumbItem</span><span class="p">(</span><span class="n">parent_key</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="n">parent_lookup_key</span><span class="o">=</span><span class="s2">&quot;name&quot;</span><span class="p">)</span>
17265
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="go">(&quot;/dcim/devices?group=&lt;group_name&gt;&quot;, &quot;Group&quot;) # Assuming that under &quot;object&quot; there is a Device instance and has &quot;group&quot;</span>
16334
17266
  </code></pre></div>
16335
17267
 
16336
17268
 
@@ -16355,69 +17287,15 @@ Label will be generated from object, but you can still override it.</p>
16355
17287
  <div class="doc doc-object doc-function">
16356
17288
 
16357
17289
 
16358
- <h3 id="nautobot.apps.ui.InstanceBreadcrumbItem.get_instance" class="doc doc-heading">
16359
- <code class="highlight language-python"><span class="n">get_instance</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
17290
+ <h3 id="nautobot.apps.ui.InstanceParentBreadcrumbItem.__post_init__" class="doc doc-heading">
17291
+ <code class="highlight language-python"><span class="n">__post_init__</span><span class="p">()</span></code>
16360
17292
 
16361
- <a href="#nautobot.apps.ui.InstanceBreadcrumbItem.get_instance" class="headerlink" title="Permanent link">&para;</a></h3>
17293
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.__post_init__" class="headerlink" title="Permanent link">&para;</a></h3>
16362
17294
 
16363
17295
 
16364
17296
  <div class="doc doc-contents ">
16365
17297
 
16366
- <p>Get the instance depending on the settings.</p>
16367
-
16368
-
16369
- <p><span class="doc-section-title">Parameters:</span></p>
16370
- <table>
16371
- <thead>
16372
- <tr>
16373
- <th>Name</th>
16374
- <th>Type</th>
16375
- <th>Description</th>
16376
- <th>Default</th>
16377
- </tr>
16378
- </thead>
16379
- <tbody>
16380
- <tr class="doc-section-item">
16381
- <td>
16382
- <code>context</code>
16383
- </td>
16384
- <td>
16385
- <code><span title="django.template.Context">Context</span></code>
16386
- </td>
16387
- <td>
16388
- <div class="doc-md-description">
16389
- <p>The current template context.</p>
16390
- </div>
16391
- </td>
16392
- <td>
16393
- <em>required</em>
16394
- </td>
16395
- </tr>
16396
- </tbody>
16397
- </table>
16398
-
16399
-
16400
- <p><span class="doc-section-title">Returns:</span></p>
16401
- <table>
16402
- <thead>
16403
- <tr>
16404
- <th>Type</th>
16405
- <th>Description</th>
16406
- </tr>
16407
- </thead>
16408
- <tbody>
16409
- <tr class="doc-section-item">
16410
- <td>
16411
- <code><span title="typing.Optional">Optional</span>[<span title="django.db.models.Model">Model</span>]</code>
16412
- </td>
16413
- <td>
16414
- <div class="doc-md-description">
16415
- <p>Optional[Model]: Instance from context.</p>
16416
- </div>
16417
- </td>
16418
- </tr>
16419
- </tbody>
16420
- </table>
17298
+ <p>Set <code>parent_query_param</code> if not filled.</p>
16421
17299
 
16422
17300
 
16423
17301
  </div>
@@ -16427,15 +17305,15 @@ Label will be generated from object, but you can still override it.</p>
16427
17305
  <div class="doc doc-object doc-function">
16428
17306
 
16429
17307
 
16430
- <h3 id="nautobot.apps.ui.InstanceBreadcrumbItem.get_label" class="doc doc-heading">
17308
+ <h3 id="nautobot.apps.ui.InstanceParentBreadcrumbItem.get_label" class="doc doc-heading">
16431
17309
  <code class="highlight language-python"><span class="n">get_label</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16432
17310
 
16433
- <a href="#nautobot.apps.ui.InstanceBreadcrumbItem.get_label" class="headerlink" title="Permanent link">&para;</a></h3>
17311
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.get_label" class="headerlink" title="Permanent link">&para;</a></h3>
16434
17312
 
16435
17313
 
16436
17314
  <div class="doc doc-contents ">
16437
17315
 
16438
- <p>Get the label (display text) for the breadcrumb from instance.</p>
17316
+ <p>Get the label (display text) for the breadcrumb from instance and provided parent.</p>
16439
17317
 
16440
17318
 
16441
17319
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -16499,15 +17377,15 @@ Label will be generated from object, but you can still override it.</p>
16499
17377
  <div class="doc doc-object doc-function">
16500
17378
 
16501
17379
 
16502
- <h3 id="nautobot.apps.ui.InstanceBreadcrumbItem.get_url" class="doc doc-heading">
17380
+ <h3 id="nautobot.apps.ui.InstanceParentBreadcrumbItem.get_url" class="doc doc-heading">
16503
17381
  <code class="highlight language-python"><span class="n">get_url</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
16504
17382
 
16505
- <a href="#nautobot.apps.ui.InstanceBreadcrumbItem.get_url" class="headerlink" title="Permanent link">&para;</a></h3>
17383
+ <a href="#nautobot.apps.ui.InstanceParentBreadcrumbItem.get_url" class="headerlink" title="Permanent link">&para;</a></h3>
16506
17384
 
16507
17385
 
16508
17386
  <div class="doc doc-contents ">
16509
17387
 
16510
- <p>Resolve the URL for the breadcrumb item based on the instance.</p>
17388
+ <p>Resolve the URL for the breadcrumb item based on the instance and provided parent.</p>
16511
17389
 
16512
17390
 
16513
17391
  <p><span class="doc-section-title">Parameters:</span></p>
@@ -17088,7 +17966,7 @@ If <code>label</code> is set explicitly, it's returned as-is or called if callab
17088
17966
  </td>
17089
17967
  <td>
17090
17968
  <div class="doc-md-description">
17091
- <p>Context key to fetch a model class, instance or dotted path string.</p>
17969
+ <p>Context key to fetch a model class, instance or dotted path string. By default: "object".</p>
17092
17970
  </div>
17093
17971
  </td>
17094
17972
  </tr>
@@ -19020,7 +19898,7 @@ already configured in context and set the <code>context_table_key</code> or pass
19020
19898
 
19021
19899
 
19022
19900
  <h3 id="nautobot.apps.ui.ObjectsTablePanel.__init__" class="doc doc-heading">
19023
- <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">context_table_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_class</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_filter</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_attribute</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">select_related_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">prefetch_related_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">order_by_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_title</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_display_count</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">paginate</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">show_table_config_button</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">include_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exclude_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">add_button_route</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span> <span class="n">add_permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hide_hierarchy_ui</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">related_field_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">enable_bulk_actions</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tab_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_wrapper_table.html&#39;</span><span class="p">,</span> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_content_objects_table.html&#39;</span><span class="p">,</span> <span class="n">header_extra_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/header_extra_content_table.html&#39;</span><span class="p">,</span> <span class="n">footer_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/footer_content_table.html&#39;</span><span class="p">,</span> <span class="n">footer_buttons</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">include_paginator</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
19901
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">context_table_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_class</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_filter</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_attribute</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">select_related_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">prefetch_related_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">order_by_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">table_title</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_display_count</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">paginate</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">show_table_config_button</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">include_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exclude_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">add_button_route</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span> <span class="n">add_permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hide_hierarchy_ui</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">related_field_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">enable_bulk_actions</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tab_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_wrapper_table.html&#39;</span><span class="p">,</span> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/body_content_objects_table.html&#39;</span><span class="p">,</span> <span class="n">header_extra_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/header_extra_content_table.html&#39;</span><span class="p">,</span> <span class="n">footer_content_template_path</span><span class="o">=</span><span class="s1">&#39;components/panel/footer_content_table.html&#39;</span><span class="p">,</span> <span class="n">footer_buttons</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">form_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">include_paginator</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
19024
19902
 
19025
19903
  <a href="#nautobot.apps.ui.ObjectsTablePanel.__init__" class="headerlink" title="Permanent link">&para;</a></h3>
19026
19904
 
@@ -19116,6 +19994,22 @@ Mutually exclusive with <code>table_filter</code>.</p>
19116
19994
  <code>None</code>
19117
19995
  </td>
19118
19996
  </tr>
19997
+ <tr class="doc-section-item">
19998
+ <td>
19999
+ <code>distinct</code>
20000
+ </td>
20001
+ <td>
20002
+ <code><span title="bool">bool</span></code>
20003
+ </td>
20004
+ <td>
20005
+ <div class="doc-md-description">
20006
+ <p>If True, apply <code>.distinct()</code> to the table queryset.</p>
20007
+ </div>
20008
+ </td>
20009
+ <td>
20010
+ <code>False</code>
20011
+ </td>
20012
+ </tr>
19119
20013
  <tr class="doc-section-item">
19120
20014
  <td>
19121
20015
  <code>select_related_fields</code>
@@ -20332,6 +21226,24 @@ e.g. [Device, Prefix, (Circuit, "circuit_terminations__location__in"), (VirtualM
20332
21226
 
20333
21227
  </div>
20334
21228
 
21229
+ <div class="doc doc-object doc-function">
21230
+
21231
+
21232
+ <h3 id="nautobot.apps.ui.Tab.should_render_content" class="doc doc-heading">
21233
+ <code class="highlight language-python"><span class="n">should_render_content</span><span class="p">(</span><span class="n">context</span><span class="p">)</span></code>
21234
+
21235
+ <a href="#nautobot.apps.ui.Tab.should_render_content" class="headerlink" title="Permanent link">&para;</a></h3>
21236
+
21237
+
21238
+ <div class="doc doc-contents ">
21239
+
21240
+ <p>Only render a main-view Tab if the active request is for the main object view rather than a separate action.</p>
21241
+
21242
+
21243
+ </div>
21244
+
21245
+ </div>
21246
+
20335
21247
 
20336
21248
 
20337
21249
  </div>
@@ -21471,6 +22383,42 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21471
22383
  <div class="doc doc-object doc-function">
21472
22384
 
21473
22385
 
22386
+ <h2 id="nautobot.apps.ui.context_object_attr" class="doc doc-heading">
22387
+ <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">ui</span><span class="o">.</span><span class="n">context_object_attr</span><span class="p">(</span><span class="n">attr_path</span><span class="p">,</span> <span class="n">context_key</span><span class="o">=</span><span class="s1">&#39;object&#39;</span><span class="p">)</span></code>
22388
+
22389
+ <a href="#nautobot.apps.ui.context_object_attr" class="headerlink" title="Permanent link">&para;</a></h2>
22390
+
22391
+
22392
+ <div class="doc doc-contents ">
22393
+
22394
+ <p>Helper function that creates callable to fetch the object from context and then nested attributes.</p>
22395
+ <p>Useful for composing breadcrumbs. For example:
22396
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>context = Context({&quot;object&quot;: Device.objects.first()})
22397
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>breadcrumbs = Breadcrumbs(items={&quot;detail&quot;: [
22398
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> InstanceBreadcrumbItem(instance=context_object_attr(&quot;location.location_type&quot;)),
22399
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> InstanceBreadcrumbItem(instance=context_object_attr(&quot;location&quot;)),
22400
+ <a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>]})
22401
+ </code></pre></div>
22402
+ Will render:
22403
+ - url to the device.location.location_type detail page
22404
+ - url to the device.location detail page</p>
22405
+
22406
+
22407
+ <p><span class="doc-section-title">Examples:</span></p>
22408
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">context_object_attr</span><span class="p">(</span><span class="s2">&quot;location.name&quot;</span><span class="p">)</span>
22409
+ <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="go">lambda context: context[&#39;object&#39;].location.name</span>
22410
+ <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="gp">&gt;&gt;&gt; </span><span class="n">context_object_attr</span><span class="p">(</span><span class="s2">&quot;location.name&quot;</span><span class="p">,</span> <span class="n">context_key</span><span class="o">=</span><span class="s2">&quot;device&quot;</span><span class="p">)</span>
22411
+ <a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="go">lambda context: context[&#39;device&#39;].location.name</span>
22412
+ </code></pre></div>
22413
+
22414
+
22415
+ </div>
22416
+
22417
+ </div>
22418
+
22419
+ <div class="doc doc-object doc-function">
22420
+
22421
+
21474
22422
  <h2 id="nautobot.apps.ui.render_component_template" class="doc doc-heading">
21475
22423
  <code class="highlight language-python"><span class="n">nautobot</span><span class="o">.</span><span class="n">apps</span><span class="o">.</span><span class="n">ui</span><span class="o">.</span><span class="n">render_component_template</span><span class="p">(</span><span class="n">template_path</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
21476
22424
 
@@ -21658,7 +22606,7 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21658
22606
 
21659
22607
 
21660
22608
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
21661
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
22609
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
21662
22610
  </a>
21663
22611
 
21664
22612
 
@@ -21666,7 +22614,7 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21666
22614
 
21667
22615
 
21668
22616
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
21669
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M549.7 124.1c-6.2-23.7-24.8-42.3-48.3-48.6C458.9 64 288.1 64 288.1 64S117.3 64 74.7 75.5c-23.5 6.3-42 24.9-48.3 48.6C15 167 15 256.4 15 256.4s0 89.4 11.4 132.3c6.3 23.6 24.8 41.5 48.3 47.8C117.3 448 288.1 448 288.1 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zM232.2 337.6V175.2l142.7 81.2z"/></svg>
22617
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M549.7 124.1c-6.2-23.7-24.8-42.3-48.3-48.6C458.9 64 288.1 64 288.1 64S117.3 64 74.7 75.5c-23.5 6.3-42 24.9-48.3 48.6C15 167 15 256.4 15 256.4s0 89.4 11.4 132.3c6.3 23.6 24.8 41.5 48.3 47.8C117.3 448 288.1 448 288.1 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zM232.2 337.6V175.2l142.7 81.2z"/></svg>
21670
22618
  </a>
21671
22619
 
21672
22620
 
@@ -21674,7 +22622,7 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21674
22622
 
21675
22623
 
21676
22624
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
21677
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M94.1 315.1c0 25.9-21.2 47.1-47.1 47.1S0 341 0 315.1 21.2 268 47.1 268h47.1v47.1zm23.7 0c0-25.9 21.2-47.1 47.1-47.1s47.1 21.2 47.1 47.1v117.8c0 25.9-21.2 47.1-47.1 47.1s-47.1-21.2-47.1-47.1zm47.1-189c-25.9 0-47.1-21.2-47.1-47.1s21.2-47 47.1-47S212 53.2 212 79.1v47.1h-47.1zm0 23.7c25.9 0 47.1 21.2 47.1 47.1S190.8 244 164.9 244H47.1C21.2 244 0 222.8 0 196.9s21.2-47.1 47.1-47.1zm189 47.1c0-25.9 21.2-47.1 47.1-47.1s47 21.2 47 47.1-21.2 47.1-47.1 47.1h-47.1v-47.1zm-23.7 0c0 25.9-21.2 47.1-47.1 47.1S236 222.8 236 196.9V79.1c0-25.9 21.2-47.1 47.1-47.1s47.1 21.2 47.1 47.1zm-47.1 189c25.9 0 47.1 21.2 47.1 47.1s-21.2 47-47.1 47-47.1-21.2-47.1-47.1v-47.1h47.1zm0-23.7c-25.9 0-47.1-21.2-47.1-47.1s21.2-47.1 47.1-47.1h117.8c25.9 0 47.1 21.2 47.1 47.1s-21.2 47.1-47.1 47.1z"/></svg>
22625
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M94.1 315.1c0 25.9-21.2 47.1-47.1 47.1S0 341 0 315.1 21.2 268 47.1 268h47.1v47.1zm23.7 0c0-25.9 21.2-47.1 47.1-47.1s47.1 21.2 47.1 47.1v117.8c0 25.9-21.2 47.1-47.1 47.1s-47.1-21.2-47.1-47.1zm47.1-189c-25.9 0-47.1-21.2-47.1-47.1s21.2-47 47.1-47S212 53.2 212 79.1v47.1h-47.1zm0 23.7c25.9 0 47.1 21.2 47.1 47.1S190.8 244 164.9 244H47.1C21.2 244 0 222.8 0 196.9s21.2-47.1 47.1-47.1zm189 47.1c0-25.9 21.2-47.1 47.1-47.1s47 21.2 47 47.1-21.2 47.1-47.1 47.1h-47.1v-47.1zm-23.7 0c0 25.9-21.2 47.1-47.1 47.1S236 222.8 236 196.9V79.1c0-25.9 21.2-47.1 47.1-47.1s47.1 21.2 47.1 47.1zm-47.1 189c25.9 0 47.1 21.2 47.1 47.1s-21.2 47-47.1 47-47.1-21.2-47.1-47.1v-47.1h47.1zm0-23.7c-25.9 0-47.1-21.2-47.1-47.1s21.2-47.1 47.1-47.1h117.8c25.9 0 47.1 21.2 47.1 47.1s-21.2 47.1-47.1 47.1z"/></svg>
21678
22626
  </a>
21679
22627
 
21680
22628
 
@@ -21682,7 +22630,7 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21682
22630
 
21683
22631
 
21684
22632
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
21685
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
22633
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
21686
22634
  </a>
21687
22635
 
21688
22636
 
@@ -21690,7 +22638,7 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21690
22638
 
21691
22639
 
21692
22640
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
21693
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
22641
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg>
21694
22642
  </a>
21695
22643
 
21696
22644
  </div>
@@ -21710,7 +22658,7 @@ Can be used as fallback if <code>view_name_key</code> won't be found in the cont
21710
22658
  <script id="__config" type="application/json">{"base": "../../..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
21711
22659
 
21712
22660
 
21713
- <script src="../../../assets/javascripts/bundle.92b07e13.min.js"></script>
22661
+ <script src="../../../assets/javascripts/bundle.f55a23d4.min.js"></script>
21714
22662
 
21715
22663
 
21716
22664
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});