nautobot 2.4.13__py3-none-any.whl → 2.4.15__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 (463) hide show
  1. nautobot/apps/choices.py +8 -0
  2. nautobot/apps/ui.py +14 -0
  3. nautobot/core/api/views.py +2 -0
  4. nautobot/core/choices.py +4 -0
  5. nautobot/core/filters.py +21 -41
  6. nautobot/core/graphql/generators.py +8 -0
  7. nautobot/core/graphql/schema.py +30 -30
  8. nautobot/core/management/commands/check_job_approval_status.py +47 -0
  9. nautobot/core/management/commands/generate_test_data.py +1 -1
  10. nautobot/core/management/commands/migrate.py +90 -1
  11. nautobot/core/models/tree_queries.py +17 -0
  12. nautobot/core/settings.py +2 -2
  13. nautobot/core/settings.yaml +3 -3
  14. nautobot/core/tables.py +29 -6
  15. nautobot/core/templates/base_django.html +1 -1
  16. nautobot/core/templates/components/panel/header_extra_content_table.html +1 -1
  17. nautobot/core/templates/generic/object_list.html +17 -20
  18. nautobot/core/templates/inc/breadcrumbs.html +14 -0
  19. nautobot/core/templatetags/buttons.py +2 -4
  20. nautobot/core/templatetags/helpers.py +29 -6
  21. nautobot/core/templatetags/ui_framework.py +21 -0
  22. nautobot/core/testing/api.py +7 -0
  23. nautobot/core/testing/filters.py +20 -3
  24. nautobot/core/testing/forms.py +1 -1
  25. nautobot/core/tests/integration/test_filters.py +2 -2
  26. nautobot/core/tests/test_breadcrumbs.py +366 -0
  27. nautobot/core/tests/test_commands.py +40 -0
  28. nautobot/core/tests/test_filters.py +51 -1
  29. nautobot/core/tests/test_forms.py +1 -1
  30. nautobot/core/tests/test_graphql.py +4 -4
  31. nautobot/core/tests/test_titles.py +183 -0
  32. nautobot/core/tests/test_tree_queries.py +30 -0
  33. nautobot/core/tests/test_views.py +2 -2
  34. nautobot/core/tests/test_views_utils.py +1 -1
  35. nautobot/core/ui/breadcrumbs.py +538 -0
  36. nautobot/core/ui/bulk_buttons.py +53 -0
  37. nautobot/core/ui/object_detail.py +31 -8
  38. nautobot/core/ui/titles.py +127 -0
  39. nautobot/core/ui/utils.py +25 -0
  40. nautobot/core/utils/migrations.py +1 -1
  41. nautobot/core/views/__init__.py +1 -1
  42. nautobot/core/views/mixins.py +26 -1
  43. nautobot/core/views/renderers.py +20 -2
  44. nautobot/core/views/utils.py +14 -13
  45. nautobot/dcim/api/serializers.py +9 -0
  46. nautobot/dcim/choices.py +55 -0
  47. nautobot/dcim/constants.py +0 -16
  48. nautobot/dcim/factory.py +1 -1
  49. nautobot/dcim/filters/__init__.py +15 -3
  50. nautobot/dcim/forms.py +120 -7
  51. nautobot/dcim/management/commands/trace_paths.py +1 -1
  52. nautobot/dcim/migrations/0072_alter_powerfeed_options_and_more.py +97 -0
  53. nautobot/dcim/models/device_component_templates.py +8 -0
  54. nautobot/dcim/models/device_components.py +31 -12
  55. nautobot/dcim/models/devices.py +1 -1
  56. nautobot/dcim/models/power.py +171 -10
  57. nautobot/dcim/models/racks.py +7 -4
  58. nautobot/dcim/tables/devices.py +2 -0
  59. nautobot/dcim/tables/devicetypes.py +1 -0
  60. nautobot/dcim/tables/power.py +30 -2
  61. nautobot/dcim/templates/dcim/device.html +2 -2
  62. nautobot/dcim/templates/dcim/devicetype_retrieve.html +1 -214
  63. nautobot/dcim/templates/dcim/location_retrieve.html +2 -2
  64. nautobot/dcim/templates/dcim/powerfeed_edit.html +8 -0
  65. nautobot/dcim/templates/dcim/powerfeed_retrieve.html +1 -1
  66. nautobot/dcim/templates/dcim/rack.html +2 -318
  67. nautobot/dcim/templates/dcim/rack_edit.html +2 -47
  68. nautobot/dcim/templates/dcim/rack_retrieve.html +318 -0
  69. nautobot/dcim/templates/dcim/rack_update.html +47 -0
  70. nautobot/dcim/tests/integration/test_device_bulk_operations.py +61 -0
  71. nautobot/dcim/tests/test_api.py +24 -4
  72. nautobot/dcim/tests/test_filters.py +91 -13
  73. nautobot/dcim/tests/test_models.py +262 -0
  74. nautobot/dcim/tests/test_views.py +20 -12
  75. nautobot/dcim/urls.py +2 -27
  76. nautobot/dcim/utils.py +13 -30
  77. nautobot/dcim/views.py +428 -146
  78. nautobot/extras/choices.py +12 -4
  79. nautobot/extras/factory.py +19 -20
  80. nautobot/extras/filters/__init__.py +3 -2
  81. nautobot/extras/filters/mixins.py +23 -7
  82. nautobot/extras/forms/__init__.py +2 -1
  83. nautobot/extras/forms/forms.py +71 -0
  84. nautobot/extras/forms/mixins.py +4 -2
  85. nautobot/extras/managers.py +4 -1
  86. nautobot/extras/migrations/0062_collect_roles_from_related_apps_roles.py +30 -7
  87. nautobot/extras/migrations/0124_add_joblogentry_index.py +16 -0
  88. nautobot/extras/migrations/0125_jobresult_date_started.py +18 -0
  89. nautobot/extras/models/customfields.py +53 -5
  90. nautobot/extras/models/datasources.py +1 -2
  91. nautobot/extras/models/jobs.py +13 -3
  92. nautobot/extras/models/relationships.py +55 -6
  93. nautobot/extras/plugins/views.py +24 -1
  94. nautobot/extras/secrets/__init__.py +1 -1
  95. nautobot/extras/tables.py +9 -0
  96. nautobot/extras/templates/extras/customfield.html +2 -129
  97. nautobot/extras/templates/extras/customfield_edit.html +2 -108
  98. nautobot/extras/templates/extras/customfield_retrieve.html +129 -0
  99. nautobot/extras/templates/extras/customfield_update.html +108 -0
  100. nautobot/extras/templates/extras/graphqlquery.html +2 -97
  101. nautobot/extras/templates/extras/graphqlquery_list.html +1 -0
  102. nautobot/extras/templates/extras/graphqlquery_retrieve.html +97 -0
  103. nautobot/extras/templates/extras/inc/jobresult.html +7 -3
  104. nautobot/extras/templates/extras/jobresult.html +2 -155
  105. nautobot/extras/templates/extras/jobresult_retrieve.html +155 -0
  106. nautobot/extras/templates/extras/marketplace.html +5 -6
  107. nautobot/extras/templates/extras/note.html +2 -53
  108. nautobot/extras/templates/extras/note_retrieve.html +53 -0
  109. nautobot/extras/templates/extras/plugins_list.html +5 -6
  110. nautobot/extras/templates/extras/secretsgroup.html +2 -29
  111. nautobot/extras/templates/extras/secretsgroup_edit.html +2 -82
  112. nautobot/extras/templates/extras/secretsgroup_retrieve.html +29 -0
  113. nautobot/extras/templates/extras/secretsgroup_update.html +82 -0
  114. nautobot/extras/templatetags/custom_links.py +2 -2
  115. nautobot/extras/templatetags/job_buttons.py +1 -1
  116. nautobot/extras/templatetags/plugins.py +1 -1
  117. nautobot/extras/tests/integration/test_computedfields.py +2 -2
  118. nautobot/extras/tests/integration/test_customfields.py +14 -11
  119. nautobot/extras/tests/integration/test_dynamicgroups.py +1 -1
  120. nautobot/extras/tests/integration/test_notes.py +1 -1
  121. nautobot/extras/tests/integration/test_plugins.py +6 -6
  122. nautobot/extras/tests/integration/test_relationships.py +2 -2
  123. nautobot/extras/tests/test_customfields.py +115 -7
  124. nautobot/extras/tests/test_filters.py +9 -0
  125. nautobot/extras/tests/test_forms.py +2 -2
  126. nautobot/extras/tests/test_plugins.py +2 -3
  127. nautobot/extras/tests/test_relationships.py +14 -8
  128. nautobot/extras/tests/test_views.py +285 -2
  129. nautobot/extras/urls.py +5 -110
  130. nautobot/extras/utils.py +5 -2
  131. nautobot/extras/views.py +116 -311
  132. nautobot/ipam/api/views.py +69 -6
  133. nautobot/ipam/tables.py +8 -15
  134. nautobot/ipam/tests/migration/test_migrations.py +8 -8
  135. nautobot/ipam/tests/test_api.py +352 -2
  136. nautobot/ipam/tests/test_models.py +1 -1
  137. nautobot/project-static/docs/404.html +34 -34
  138. nautobot/project-static/docs/apps/index.html +34 -34
  139. nautobot/project-static/docs/apps/nautobot-apps.html +34 -34
  140. nautobot/project-static/docs/assets/_mkdocstrings.css +44 -6
  141. nautobot/project-static/docs/assets/javascripts/{bundle.56ea9cef.min.js → bundle.50899def.min.js} +2 -2
  142. nautobot/project-static/docs/assets/javascripts/{bundle.56ea9cef.min.js.map → bundle.50899def.min.js.map} +2 -2
  143. nautobot/project-static/docs/assets/stylesheets/{main.342714a4.min.css → main.7e37652d.min.css} +1 -1
  144. nautobot/project-static/docs/assets/stylesheets/{main.342714a4.min.css.map → main.7e37652d.min.css.map} +1 -1
  145. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +39 -34
  146. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +36 -34
  147. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +139 -54
  148. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +48 -38
  149. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +50 -40
  150. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +36 -34
  151. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +35 -34
  152. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +43 -39
  153. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +52 -42
  154. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +50 -41
  155. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +54 -44
  156. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +85 -93
  157. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +154 -62
  158. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +54 -46
  159. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +146 -87
  160. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +240 -70
  161. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +38 -35
  162. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +41 -35
  163. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +173 -52
  164. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +269 -85
  165. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +5987 -2643
  166. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +36 -34
  167. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +165 -89
  168. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +161 -69
  169. nautobot/project-static/docs/development/apps/api/configuration-view.html +34 -34
  170. nautobot/project-static/docs/development/apps/api/database-backend-config.html +34 -34
  171. nautobot/project-static/docs/development/apps/api/models/django-admin.html +34 -34
  172. nautobot/project-static/docs/development/apps/api/models/global-search.html +34 -34
  173. nautobot/project-static/docs/development/apps/api/models/graphql.html +34 -34
  174. nautobot/project-static/docs/development/apps/api/models/index.html +34 -34
  175. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +34 -34
  176. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +34 -34
  177. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +34 -34
  178. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +34 -34
  179. nautobot/project-static/docs/development/apps/api/platform-features/index.html +34 -34
  180. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +34 -34
  181. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +34 -34
  182. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +34 -34
  183. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +34 -34
  184. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +34 -34
  185. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +34 -34
  186. nautobot/project-static/docs/development/apps/api/prometheus.html +34 -34
  187. nautobot/project-static/docs/development/apps/api/setup.html +34 -34
  188. nautobot/project-static/docs/development/apps/api/testing.html +34 -34
  189. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +34 -34
  190. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +34 -34
  191. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +34 -34
  192. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +34 -34
  193. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +34 -34
  194. nautobot/project-static/docs/development/apps/api/views/base-template.html +34 -34
  195. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +34 -34
  196. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +34 -34
  197. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +34 -34
  198. nautobot/project-static/docs/development/apps/api/views/index.html +34 -34
  199. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +34 -34
  200. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +42 -36
  201. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +34 -34
  202. nautobot/project-static/docs/development/apps/api/views/notes.html +34 -34
  203. nautobot/project-static/docs/development/apps/api/views/rest-api.html +34 -34
  204. nautobot/project-static/docs/development/apps/api/views/urls.html +34 -34
  205. nautobot/project-static/docs/development/apps/index.html +34 -34
  206. nautobot/project-static/docs/development/apps/migration/code-updates.html +34 -34
  207. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +34 -34
  208. nautobot/project-static/docs/development/apps/migration/from-v1.html +34 -34
  209. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +34 -34
  210. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +34 -34
  211. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +34 -34
  212. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +34 -34
  213. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +37 -37
  214. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +10544 -0
  215. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +34 -34
  216. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +34 -34
  217. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +34 -34
  218. nautobot/project-static/docs/development/apps/porting-from-netbox.html +37 -37
  219. nautobot/project-static/docs/development/core/application-registry.html +162 -133
  220. nautobot/project-static/docs/development/core/best-practices.html +34 -34
  221. nautobot/project-static/docs/development/core/bootstrap-ui.html +34 -34
  222. nautobot/project-static/docs/development/core/caching.html +34 -34
  223. nautobot/project-static/docs/development/core/controllers.html +34 -34
  224. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +34 -34
  225. nautobot/project-static/docs/development/core/generic-views.html +34 -34
  226. nautobot/project-static/docs/development/core/getting-started.html +34 -34
  227. nautobot/project-static/docs/development/core/homepage.html +34 -34
  228. nautobot/project-static/docs/development/core/index.html +34 -34
  229. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +34 -34
  230. nautobot/project-static/docs/development/core/model-checklist.html +34 -34
  231. nautobot/project-static/docs/development/core/model-features.html +34 -34
  232. nautobot/project-static/docs/development/core/natural-keys.html +34 -34
  233. nautobot/project-static/docs/development/core/navigation-menu.html +34 -34
  234. nautobot/project-static/docs/development/core/release-checklist.html +34 -34
  235. nautobot/project-static/docs/development/core/role-internals.html +34 -34
  236. nautobot/project-static/docs/development/core/settings.html +34 -34
  237. nautobot/project-static/docs/development/core/style-guide.html +34 -34
  238. nautobot/project-static/docs/development/core/templates.html +34 -34
  239. nautobot/project-static/docs/development/core/testing.html +34 -34
  240. nautobot/project-static/docs/development/core/ui-component-framework.html +724 -289
  241. nautobot/project-static/docs/development/core/user-preferences.html +34 -34
  242. nautobot/project-static/docs/development/index.html +34 -34
  243. nautobot/project-static/docs/development/jobs/getting-started.html +34 -34
  244. nautobot/project-static/docs/development/jobs/index.html +34 -34
  245. nautobot/project-static/docs/development/jobs/installation.html +34 -34
  246. nautobot/project-static/docs/development/jobs/job-extensions.html +34 -34
  247. nautobot/project-static/docs/development/jobs/job-logging.html +34 -34
  248. nautobot/project-static/docs/development/jobs/job-patterns.html +34 -34
  249. nautobot/project-static/docs/development/jobs/job-structure.html +34 -34
  250. nautobot/project-static/docs/development/jobs/migration/from-v1.html +34 -34
  251. nautobot/project-static/docs/development/jobs/testing.html +34 -34
  252. nautobot/project-static/docs/index.html +34 -34
  253. nautobot/project-static/docs/media/development/core/ui-component-framework/breadcrumbs-titles-data-flow.png +0 -0
  254. nautobot/project-static/docs/media/power_distribution.png +0 -0
  255. nautobot/project-static/docs/objects.inv +0 -0
  256. nautobot/project-static/docs/overview/application_stack.html +34 -34
  257. nautobot/project-static/docs/overview/design_philosophy.html +34 -34
  258. nautobot/project-static/docs/release-notes/index.html +34 -34
  259. nautobot/project-static/docs/release-notes/version-1.0.html +34 -34
  260. nautobot/project-static/docs/release-notes/version-1.1.html +34 -34
  261. nautobot/project-static/docs/release-notes/version-1.2.html +34 -34
  262. nautobot/project-static/docs/release-notes/version-1.3.html +34 -34
  263. nautobot/project-static/docs/release-notes/version-1.4.html +34 -34
  264. nautobot/project-static/docs/release-notes/version-1.5.html +34 -34
  265. nautobot/project-static/docs/release-notes/version-1.6.html +34 -34
  266. nautobot/project-static/docs/release-notes/version-2.0.html +34 -34
  267. nautobot/project-static/docs/release-notes/version-2.1.html +34 -34
  268. nautobot/project-static/docs/release-notes/version-2.2.html +34 -34
  269. nautobot/project-static/docs/release-notes/version-2.3.html +34 -34
  270. nautobot/project-static/docs/release-notes/version-2.4.html +402 -34
  271. nautobot/project-static/docs/requirements.txt +3 -3
  272. nautobot/project-static/docs/search/search_index.json +1 -1
  273. nautobot/project-static/docs/sitemap.xml +303 -299
  274. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  275. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +34 -34
  276. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +34 -34
  277. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +34 -34
  278. nautobot/project-static/docs/user-guide/administration/configuration/index.html +34 -34
  279. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +34 -34
  280. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +37 -37
  281. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +34 -34
  282. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +34 -34
  283. nautobot/project-static/docs/user-guide/administration/guides/docker.html +34 -34
  284. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +34 -34
  285. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +34 -34
  286. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +34 -34
  287. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +34 -34
  288. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +34 -34
  289. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +34 -34
  290. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +34 -34
  291. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +34 -34
  292. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +34 -34
  293. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +34 -34
  294. nautobot/project-static/docs/user-guide/administration/installation/index.html +34 -34
  295. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +34 -34
  296. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +34 -34
  297. nautobot/project-static/docs/user-guide/administration/installation/services.html +34 -34
  298. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +34 -34
  299. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +34 -34
  300. nautobot/project-static/docs/user-guide/administration/security/index.html +34 -34
  301. nautobot/project-static/docs/user-guide/administration/security/notices.html +34 -34
  302. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +296 -251
  303. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +34 -34
  304. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +34 -34
  305. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +34 -34
  306. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +34 -34
  307. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +34 -34
  308. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +34 -34
  309. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +34 -34
  310. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +34 -34
  311. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +34 -34
  312. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +34 -34
  313. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +34 -34
  314. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +34 -34
  315. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +34 -34
  316. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +34 -34
  317. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +34 -34
  318. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +34 -34
  319. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +34 -34
  320. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +34 -34
  321. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +34 -34
  322. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +34 -34
  323. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +34 -34
  324. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +34 -34
  325. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +34 -34
  326. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +34 -34
  327. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +34 -34
  328. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +34 -34
  329. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +34 -34
  330. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +34 -34
  331. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +34 -34
  332. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +34 -34
  333. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +34 -34
  334. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +34 -34
  335. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +34 -34
  336. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +34 -34
  337. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +34 -34
  338. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +34 -34
  339. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +34 -34
  340. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +37 -37
  341. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +34 -34
  342. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +34 -34
  343. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +42 -52
  344. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +34 -34
  345. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +34 -34
  346. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +34 -34
  347. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +34 -34
  348. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +37 -37
  349. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +34 -34
  350. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +34 -34
  351. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +34 -34
  352. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +34 -34
  353. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +316 -39
  354. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +35 -35
  355. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +34 -34
  356. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +147 -37
  357. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +52 -35
  358. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +51 -34
  359. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +34 -34
  360. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +34 -34
  361. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +34 -34
  362. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +34 -34
  363. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +34 -34
  364. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +34 -34
  365. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +34 -34
  366. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +34 -34
  367. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +34 -34
  368. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +34 -34
  369. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +34 -34
  370. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +34 -34
  371. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +34 -34
  372. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +34 -34
  373. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +34 -34
  374. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +34 -34
  375. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +34 -34
  376. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +34 -34
  377. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +34 -34
  378. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +34 -34
  379. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +34 -34
  380. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +34 -34
  381. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +34 -34
  382. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +34 -34
  383. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +34 -34
  384. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +34 -34
  385. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +34 -34
  386. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +34 -34
  387. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +34 -34
  388. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +34 -34
  389. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +34 -34
  390. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +34 -34
  391. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +34 -34
  392. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +34 -34
  393. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +34 -34
  394. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +34 -34
  395. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +34 -34
  396. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +34 -34
  397. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +34 -34
  398. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +34 -34
  399. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +34 -34
  400. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +34 -34
  401. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +34 -34
  402. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +34 -34
  403. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +34 -34
  404. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +34 -34
  405. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +34 -34
  406. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +34 -34
  407. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +34 -34
  408. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +34 -34
  409. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +34 -34
  410. nautobot/project-static/docs/user-guide/index.html +34 -34
  411. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +34 -34
  412. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +34 -34
  413. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +34 -34
  414. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +34 -34
  415. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +34 -34
  416. nautobot/project-static/docs/user-guide/platform-functionality/events.html +34 -34
  417. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +34 -34
  418. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +34 -34
  419. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +34 -34
  420. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +34 -34
  421. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +34 -34
  422. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +34 -34
  423. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +34 -34
  424. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +35 -35
  425. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +34 -34
  426. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +34 -34
  427. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +34 -34
  428. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +34 -34
  429. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +34 -34
  430. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +34 -34
  431. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +34 -34
  432. nautobot/project-static/docs/user-guide/platform-functionality/note.html +34 -34
  433. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +34 -34
  434. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +34 -34
  435. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +34 -34
  436. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +34 -34
  437. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +34 -34
  438. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +34 -34
  439. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +34 -34
  440. nautobot/project-static/docs/user-guide/platform-functionality/role.html +34 -34
  441. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +34 -34
  442. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +34 -34
  443. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +34 -34
  444. nautobot/project-static/docs/user-guide/platform-functionality/status.html +34 -34
  445. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +34 -34
  446. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +34 -34
  447. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +34 -34
  448. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +34 -34
  449. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +34 -34
  450. nautobot/tenancy/api/views.py +2 -1
  451. nautobot/users/tests/test_api.py +2 -2
  452. nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -252
  453. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -75
  454. nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +252 -0
  455. nautobot/virtualization/templates/virtualization/virtualmachine_update.html +75 -0
  456. nautobot/virtualization/urls.py +3 -61
  457. nautobot/virtualization/views.py +48 -72
  458. {nautobot-2.4.13.dist-info → nautobot-2.4.15.dist-info}/METADATA +27 -27
  459. {nautobot-2.4.13.dist-info → nautobot-2.4.15.dist-info}/RECORD +463 -439
  460. {nautobot-2.4.13.dist-info → nautobot-2.4.15.dist-info}/LICENSE.txt +0 -0
  461. {nautobot-2.4.13.dist-info → nautobot-2.4.15.dist-info}/NOTICE +0 -0
  462. {nautobot-2.4.13.dist-info → nautobot-2.4.15.dist-info}/WHEEL +0 -0
  463. {nautobot-2.4.13.dist-info → nautobot-2.4.15.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.15">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.16">
22
22
 
23
23
 
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- <link rel="stylesheet" href="../../assets/stylesheets/main.342714a4.min.css">
29
+ <link rel="stylesheet" href="../../assets/stylesheets/main.7e37652d.min.css">
30
30
 
31
31
 
32
32
  <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- <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%206.7.2%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%202024%20Fonticons%2C%20Inc.--%3E%3Cpath%20d%3D%22M288%200H128c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032v132.8c0%2011.8-3.3%2023.5-9.5%2033.5L10.3%20406.2C3.6%20417.2%200%20429.7%200%20442.6%200%20480.9%2031.1%20512%2069.4%20512h309.2c38.3%200%2069.4-31.1%2069.4-69.4%200-12.8-3.6-25.4-10.3-36.4L329.5%20230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7%200%2032-14.3%2032-32S337.7%200%20320%200zm-96%20196.8V64h64v132.8c0%2023.7%206.6%2046.9%2019%2067.1l34.5%2056.1h-171l34.5-56.1c12.4-20.2%2019-43.4%2019-67.1%22/%3E%3C/svg%3E');}</style>
41
+ <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>
42
42
 
43
43
 
44
44
 
@@ -220,7 +220,7 @@
220
220
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
221
221
  <div class="md-source__icon md-icon">
222
222
 
223
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
223
+ <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>
224
224
  </div>
225
225
  <div class="md-source__repository">
226
226
  GitHub
@@ -392,7 +392,7 @@
392
392
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
393
393
  <div class="md-source__icon md-icon">
394
394
 
395
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
395
+ <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>
396
396
  </div>
397
397
  <div class="md-source__repository">
398
398
  GitHub
@@ -4004,29 +4004,6 @@
4004
4004
 
4005
4005
 
4006
4006
 
4007
- <li class="md-nav__item">
4008
- <a href="../../user-guide/core-data-model/dcim/inventoryitem.html" class="md-nav__link">
4009
-
4010
-
4011
-
4012
- <span class="md-ellipsis">
4013
- Inventory Item
4014
-
4015
- </span>
4016
-
4017
-
4018
- </a>
4019
- </li>
4020
-
4021
-
4022
-
4023
-
4024
-
4025
-
4026
-
4027
-
4028
-
4029
-
4030
4007
  <li class="md-nav__item">
4031
4008
  <a href="../../user-guide/core-data-model/dcim/modulebay.html" class="md-nav__link">
4032
4009
 
@@ -8696,6 +8673,29 @@
8696
8673
 
8697
8674
 
8698
8675
 
8676
+
8677
+
8678
+
8679
+
8680
+
8681
+
8682
+ <li class="md-nav__item">
8683
+ <a href="../apps/migration/ui-component-framework/breadcrumbs-titles.html" class="md-nav__link">
8684
+
8685
+
8686
+
8687
+ <span class="md-ellipsis">
8688
+ Breadcrumbs and titles
8689
+
8690
+ </span>
8691
+
8692
+
8693
+ </a>
8694
+ </li>
8695
+
8696
+
8697
+
8698
+
8699
8699
  </ul>
8700
8700
  </nav>
8701
8701
 
@@ -9474,11 +9474,29 @@
9474
9474
  </ul>
9475
9475
  </nav>
9476
9476
 
9477
+ </li>
9478
+
9479
+ <li class="md-nav__item">
9480
+ <a href="#page-headings-and-document-titles" class="md-nav__link">
9481
+ <span class="md-ellipsis">
9482
+ Page headings and document titles
9483
+ </span>
9484
+ </a>
9485
+
9477
9486
  </li>
9478
9487
 
9479
9488
  </ul>
9480
9489
  </nav>
9481
9490
 
9491
+ </li>
9492
+
9493
+ <li class="md-nav__item">
9494
+ <a href="#breadcrumbs-component" class="md-nav__link">
9495
+ <span class="md-ellipsis">
9496
+ Breadcrumbs Component
9497
+ </span>
9498
+ </a>
9499
+
9482
9500
  </li>
9483
9501
 
9484
9502
  <li class="md-nav__item">
@@ -9833,6 +9851,96 @@
9833
9851
  </ul>
9834
9852
  </nav>
9835
9853
 
9854
+ </li>
9855
+
9856
+ <li class="md-nav__item">
9857
+ <a href="#breadcrumbs-and-titles-overview" class="md-nav__link">
9858
+ <span class="md-ellipsis">
9859
+ Breadcrumbs and titles overview
9860
+ </span>
9861
+ </a>
9862
+
9863
+ <nav class="md-nav" aria-label="Breadcrumbs and titles overview">
9864
+ <ul class="md-nav__list">
9865
+
9866
+ <li class="md-nav__item">
9867
+ <a href="#breadcrumbitem-configuration" class="md-nav__link">
9868
+ <span class="md-ellipsis">
9869
+ BreadcrumbItem Configuration
9870
+ </span>
9871
+ </a>
9872
+
9873
+ <nav class="md-nav" aria-label="BreadcrumbItem Configuration">
9874
+ <ul class="md-nav__list">
9875
+
9876
+ <li class="md-nav__item">
9877
+ <a href="#viewnamebreadcrumbitem-class" class="md-nav__link">
9878
+ <span class="md-ellipsis">
9879
+ ViewNameBreadcrumbItem Class
9880
+ </span>
9881
+ </a>
9882
+
9883
+ </li>
9884
+
9885
+ <li class="md-nav__item">
9886
+ <a href="#modelbreadcrumbitem-class" class="md-nav__link">
9887
+ <span class="md-ellipsis">
9888
+ ModelBreadcrumbItem Class
9889
+ </span>
9890
+ </a>
9891
+
9892
+ </li>
9893
+
9894
+ <li class="md-nav__item">
9895
+ <a href="#instancebreadcrumbitem-class" class="md-nav__link">
9896
+ <span class="md-ellipsis">
9897
+ InstanceBreadcrumbItem Class
9898
+ </span>
9899
+ </a>
9900
+
9901
+ </li>
9902
+
9903
+ </ul>
9904
+ </nav>
9905
+
9906
+ </li>
9907
+
9908
+ <li class="md-nav__item">
9909
+ <a href="#customizing-breadcrumbs" class="md-nav__link">
9910
+ <span class="md-ellipsis">
9911
+ Customizing Breadcrumbs
9912
+ </span>
9913
+ </a>
9914
+
9915
+ <nav class="md-nav" aria-label="Customizing Breadcrumbs">
9916
+ <ul class="md-nav__list">
9917
+
9918
+ <li class="md-nav__item">
9919
+ <a href="#example-1-simple-override" class="md-nav__link">
9920
+ <span class="md-ellipsis">
9921
+ Example 1: Simple Override
9922
+ </span>
9923
+ </a>
9924
+
9925
+ </li>
9926
+
9927
+ <li class="md-nav__item">
9928
+ <a href="#example-2-complex-navigation" class="md-nav__link">
9929
+ <span class="md-ellipsis">
9930
+ Example 2: Complex Navigation
9931
+ </span>
9932
+ </a>
9933
+
9934
+ </li>
9935
+
9936
+ </ul>
9937
+ </nav>
9938
+
9939
+ </li>
9940
+
9941
+ </ul>
9942
+ </nav>
9943
+
9836
9944
  </li>
9837
9945
 
9838
9946
  <li class="md-nav__item">
@@ -10828,11 +10936,29 @@
10828
10936
  </ul>
10829
10937
  </nav>
10830
10938
 
10939
+ </li>
10940
+
10941
+ <li class="md-nav__item">
10942
+ <a href="#page-headings-and-document-titles" class="md-nav__link">
10943
+ <span class="md-ellipsis">
10944
+ Page headings and document titles
10945
+ </span>
10946
+ </a>
10947
+
10831
10948
  </li>
10832
10949
 
10833
10950
  </ul>
10834
10951
  </nav>
10835
10952
 
10953
+ </li>
10954
+
10955
+ <li class="md-nav__item">
10956
+ <a href="#breadcrumbs-component" class="md-nav__link">
10957
+ <span class="md-ellipsis">
10958
+ Breadcrumbs Component
10959
+ </span>
10960
+ </a>
10961
+
10836
10962
  </li>
10837
10963
 
10838
10964
  <li class="md-nav__item">
@@ -11187,6 +11313,96 @@
11187
11313
  </ul>
11188
11314
  </nav>
11189
11315
 
11316
+ </li>
11317
+
11318
+ <li class="md-nav__item">
11319
+ <a href="#breadcrumbs-and-titles-overview" class="md-nav__link">
11320
+ <span class="md-ellipsis">
11321
+ Breadcrumbs and titles overview
11322
+ </span>
11323
+ </a>
11324
+
11325
+ <nav class="md-nav" aria-label="Breadcrumbs and titles overview">
11326
+ <ul class="md-nav__list">
11327
+
11328
+ <li class="md-nav__item">
11329
+ <a href="#breadcrumbitem-configuration" class="md-nav__link">
11330
+ <span class="md-ellipsis">
11331
+ BreadcrumbItem Configuration
11332
+ </span>
11333
+ </a>
11334
+
11335
+ <nav class="md-nav" aria-label="BreadcrumbItem Configuration">
11336
+ <ul class="md-nav__list">
11337
+
11338
+ <li class="md-nav__item">
11339
+ <a href="#viewnamebreadcrumbitem-class" class="md-nav__link">
11340
+ <span class="md-ellipsis">
11341
+ ViewNameBreadcrumbItem Class
11342
+ </span>
11343
+ </a>
11344
+
11345
+ </li>
11346
+
11347
+ <li class="md-nav__item">
11348
+ <a href="#modelbreadcrumbitem-class" class="md-nav__link">
11349
+ <span class="md-ellipsis">
11350
+ ModelBreadcrumbItem Class
11351
+ </span>
11352
+ </a>
11353
+
11354
+ </li>
11355
+
11356
+ <li class="md-nav__item">
11357
+ <a href="#instancebreadcrumbitem-class" class="md-nav__link">
11358
+ <span class="md-ellipsis">
11359
+ InstanceBreadcrumbItem Class
11360
+ </span>
11361
+ </a>
11362
+
11363
+ </li>
11364
+
11365
+ </ul>
11366
+ </nav>
11367
+
11368
+ </li>
11369
+
11370
+ <li class="md-nav__item">
11371
+ <a href="#customizing-breadcrumbs" class="md-nav__link">
11372
+ <span class="md-ellipsis">
11373
+ Customizing Breadcrumbs
11374
+ </span>
11375
+ </a>
11376
+
11377
+ <nav class="md-nav" aria-label="Customizing Breadcrumbs">
11378
+ <ul class="md-nav__list">
11379
+
11380
+ <li class="md-nav__item">
11381
+ <a href="#example-1-simple-override" class="md-nav__link">
11382
+ <span class="md-ellipsis">
11383
+ Example 1: Simple Override
11384
+ </span>
11385
+ </a>
11386
+
11387
+ </li>
11388
+
11389
+ <li class="md-nav__item">
11390
+ <a href="#example-2-complex-navigation" class="md-nav__link">
11391
+ <span class="md-ellipsis">
11392
+ Example 2: Complex Navigation
11393
+ </span>
11394
+ </a>
11395
+
11396
+ </li>
11397
+
11398
+ </ul>
11399
+ </nav>
11400
+
11401
+ </li>
11402
+
11403
+ </ul>
11404
+ </nav>
11405
+
11190
11406
  </li>
11191
11407
 
11192
11408
  <li class="md-nav__item">
@@ -11417,31 +11633,110 @@
11417
11633
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/buttons-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Buttons Example" class="on-glb" src="../../media/development/core/ui-component-framework/buttons-example.png" /></a></li>
11418
11634
  </ul>
11419
11635
  </div>
11636
+ <h3 id="page-headings-and-document-titles">Page headings and document titles<a class="headerlink" href="#page-headings-and-document-titles" title="Permanent link">&para;</a></h3>
11637
+ <p>The Titles component provides a flexible system for generating page titles and headings based on the current view action and context.</p>
11638
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Titles</span>
11639
+ <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
11640
+ <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="c1"># Create a document title instance</span>
11641
+ <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="n">titles</span> <span class="o">=</span> <span class="n">Titles</span><span class="p">(</span><span class="n">titles</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;list&quot;</span><span class="p">:</span> <span class="s2">&quot;{{obj_type_plural}}&quot;</span><span class="p">})</span>
11642
+ <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a>
11643
+ <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="c1"># Render title for a list view</span>
11644
+ <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span>
11645
+ <a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="s1">&#39;view_action&#39;</span><span class="p">:</span> <span class="s1">&#39;list&#39;</span><span class="p">,</span>
11646
+ <a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> <span class="s1">&#39;obj_type_plural&#39;</span><span class="p">:</span> <span class="s1">&#39;devices&#39;</span><span class="p">,</span>
11647
+ <a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> <span class="s1">&#39;view_titles&#39;</span><span class="p">:</span> <span class="n">titles</span><span class="p">,</span>
11648
+ <a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="p">})</span>
11649
+ <a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a>
11650
+ <a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a><span class="n">title</span> <span class="o">=</span> <span class="n">titles</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span> <span class="c1"># Returns: &quot;Devices&quot;</span>
11651
+ </code></pre></div>
11652
+ <p>In HTML there is available <code>render_title</code> helper that use the <code>Title</code> instance from <code>context['view_titles']</code> and properly renders the page heading and document title.</p>
11653
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>{% block content %}
11654
+ <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>{% block title %}{% render_title %}{% endblock %}<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
11655
+ <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>{% endblock %}
11656
+ </code></pre></div>
11657
+ <h2 id="breadcrumbs-component">Breadcrumbs Component<a class="headerlink" href="#breadcrumbs-component" title="Permanent link">&para;</a></h2>
11658
+ <p>The Breadcrumbs component creates navigation trails that help users understand their location within the application hierarchy.</p>
11659
+ <p>There are 3 main breadcrumb items classes:
11660
+ - <code>ViewNameBreadcrumbItem</code> - Handles breadcrumbs that are generated from Django view names using URL reversing.
11661
+ - <code>ModelBreadcrumbItem</code> - Generates breadcrumbs from Django model metadata, automatically creating appropriate URLs and labels.
11662
+ - <code>InstanceBreadcrumbItem</code> - Creates detail breadcrumbs for specific object instances, generating URLs to the object's detail page.
11663
+ - <code>BaseBreadcrumbItem</code> - Can be used to create custom breadcrumb items or to show just empty "label" within the breadcrumbs path.</p>
11664
+ <p>By default, breadcrumbs class will add to the breadcrumbs path following items:
11665
+ - link to the <code>list_url</code> at the beginning
11666
+ - link to view the <code>object</code> details at the end</p>
11667
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Breadcrumbs</span><span class="p">,</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">,</span> <span class="n">ModelBreadcrumbItem</span><span class="p">,</span> <span class="n">InstanceBreadcrumbItem</span>
11668
+ <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>
11669
+ <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="c1"># Use default breadcrumbs</span>
11670
+ <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="n">breadcrumbs</span> <span class="o">=</span> <span class="n">Breadcrumbs</span><span class="p">()</span>
11671
+ <a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a>
11672
+ <a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="c1"># Render for a device detail view</span>
11673
+ <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span>
11674
+ <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a> <span class="s1">&#39;view_action&#39;</span><span class="p">:</span> <span class="s1">&#39;retrieve&#39;</span><span class="p">,</span>
11675
+ <a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a> <span class="s1">&#39;detail&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># Indicates this is a detail view</span>
11676
+ <a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a> <span class="s1">&#39;object&#39;</span><span class="p">:</span> <span class="n">device</span><span class="p">,</span>
11677
+ <a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="p">})</span>
11678
+ <a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="n">html</span> <span class="o">=</span> <span class="n">breadcrumbs</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
11679
+ </code></pre></div>
11680
+ <p>It will generate:</p>
11681
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="p">&lt;</span><span class="nt">ol</span> <span class="na">class</span><span class="o">=</span><span class="s">&quot;breadcrumb&quot;</span><span class="p">&gt;</span>
11682
+ <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;/dcim/devices&quot;</span><span class="p">&gt;</span>Devices<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
11683
+ <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;/dcim/devices/&lt;uuid&gt;&quot;</span><span class="p">&gt;</span>Device name<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
11684
+ <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="p">&lt;/</span><span class="nt">ol</span><span class="p">&gt;</span>
11685
+ </code></pre></div>
11686
+ <div class="admonition important">
11687
+ <p class="admonition-title">Important</p>
11688
+ <p>By adding custom items you're actually extending the default paths.</p>
11689
+ </div>
11690
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Breadcrumbs</span><span class="p">,</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">,</span> <span class="n">ModelBreadcrumbItem</span><span class="p">,</span> <span class="n">InstanceBreadcrumbItem</span>
11691
+ <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>
11692
+ <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="c1"># Use default breadcrumbs</span>
11693
+ <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="n">breadcrumbs</span> <span class="o">=</span> <span class="n">Breadcrumbs</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;detail&quot;</span><span class="p">:</span> <span class="p">[</span>
11694
+ <a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span><span class="n">viewname_str</span><span class="o">=</span><span class="s2">&quot;home&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Home&quot;</span><span class="p">),</span>
11695
+ <a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model_key</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">),</span>
11696
+ <a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="p">]})</span>
11697
+ <a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a>
11698
+ <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="c1"># Render for a device detail view</span>
11699
+ <a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">({</span>
11700
+ <a id="__codelineno-6-11" name="__codelineno-6-11" href="#__codelineno-6-11"></a> <span class="s1">&#39;view_action&#39;</span><span class="p">:</span> <span class="s1">&#39;retrieve&#39;</span><span class="p">,</span>
11701
+ <a id="__codelineno-6-12" name="__codelineno-6-12" href="#__codelineno-6-12"></a> <span class="s1">&#39;detail&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># Indicates this is a detail view</span>
11702
+ <a id="__codelineno-6-13" name="__codelineno-6-13" href="#__codelineno-6-13"></a> <span class="s1">&#39;object&#39;</span><span class="p">:</span> <span class="n">device</span><span class="p">,</span>
11703
+ <a id="__codelineno-6-14" name="__codelineno-6-14" href="#__codelineno-6-14"></a> <span class="s1">&#39;location&#39;</span><span class="p">:</span> <span class="n">device</span><span class="o">.</span><span class="n">location</span><span class="p">,</span>
11704
+ <a id="__codelineno-6-15" name="__codelineno-6-15" href="#__codelineno-6-15"></a><span class="p">})</span>
11705
+ <a id="__codelineno-6-16" name="__codelineno-6-16" href="#__codelineno-6-16"></a><span class="n">html</span> <span class="o">=</span> <span class="n">breadcrumbs</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
11706
+ </code></pre></div>
11707
+ <p>It will generate:</p>
11708
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="p">&lt;</span><span class="nt">ol</span> <span class="na">class</span><span class="o">=</span><span class="s">&quot;breadcrumb&quot;</span><span class="p">&gt;</span>
11709
+ <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;/dcim/devices&quot;</span><span class="p">&gt;</span>Devices<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
11710
+ <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;/&quot;</span><span class="p">&gt;</span>Home<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
11711
+ <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;/dcim/locations&quot;</span><span class="p">&gt;</span>Locations<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
11712
+ <a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a> <span class="p">&lt;</span><span class="nt">li</span><span class="p">&gt;&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;/dcim/devices/&lt;uuid&gt;&quot;</span><span class="p">&gt;</span>Device name<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;&lt;/</span><span class="nt">li</span><span class="p">&gt;</span>
11713
+ <a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="p">&lt;/</span><span class="nt">ol</span><span class="p">&gt;</span>
11714
+ </code></pre></div>
11420
11715
  <h2 id="panel-types">Panel Types<a class="headerlink" href="#panel-types" title="Permanent link">&para;</a></h2>
11421
11716
  <h3 id="base-panel">Base Panel<a class="headerlink" href="#base-panel" title="Permanent link">&para;</a></h3>
11422
11717
  <p>The Panel component serves as a base class for creating individual display panels within a Layout system. You'll rarely use it directly, but it's important to understand as the base class for the more feature-filled subclasses described below.</p>
11423
11718
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Panel">Code reference</a></p>
11424
11719
  <h4 id="panel-examples">Panel Examples<a class="headerlink" href="#panel-examples" title="Permanent link">&para;</a></h4>
11425
- <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11426
- <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
11427
- <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="n">Panel</span><span class="p">(</span>
11428
- <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11429
- <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11430
- <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Panel Header&quot;</span><span class="p">,</span>
11431
- <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="p">)</span>
11720
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11721
+ <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
11722
+ <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">Panel</span><span class="p">(</span>
11723
+ <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11724
+ <a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11725
+ <a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Panel Header&quot;</span><span class="p">,</span>
11726
+ <a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a><span class="p">)</span>
11432
11727
  </code></pre></div>
11433
- <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11434
- <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
11435
- <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="n">Panel</span><span class="p">(</span>
11436
- <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
11437
- <a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
11438
- <a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Optional Params Included&quot;</span><span class="p">,</span>
11439
- <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_content_template.html&quot;</span><span class="p">,</span>
11440
- <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a> <span class="n">header_extra_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/header_extra_content_template.html&quot;</span><span class="p">,</span>
11441
- <a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a> <span class="n">footer_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/footer_content_template.html&quot;</span><span class="p">,</span>
11442
- <a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a> <span class="n">template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/template.html&quot;</span><span class="p">,</span>
11443
- <a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_wrapper_template.html&quot;</span><span class="p">,</span>
11444
- <a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="p">)</span>
11728
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">Panel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11729
+ <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
11730
+ <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">Panel</span><span class="p">(</span>
11731
+ <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
11732
+ <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
11733
+ <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Optional Params Included&quot;</span><span class="p">,</span>
11734
+ <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> <span class="n">body_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_content_template.html&quot;</span><span class="p">,</span>
11735
+ <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a> <span class="n">header_extra_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/header_extra_content_template.html&quot;</span><span class="p">,</span>
11736
+ <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a> <span class="n">footer_content_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/footer_content_template.html&quot;</span><span class="p">,</span>
11737
+ <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a> <span class="n">template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/template.html&quot;</span><span class="p">,</span>
11738
+ <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a> <span class="n">body_wrapper_template_path</span><span class="o">=</span><span class="s2">&quot;path/to/template/body_wrapper_template.html&quot;</span><span class="p">,</span>
11739
+ <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a><span class="p">)</span>
11445
11740
  </code></pre></div>
11446
11741
  <h3 id="objectfieldspanel">ObjectFieldsPanel<a class="headerlink" href="#objectfieldspanel" title="Permanent link">&para;</a></h3>
11447
11742
  <p><code>ObjectFieldsPanel</code> is designed to automatically render object attributes in a table format. It's particularly useful for displaying model instances or any object with defined attributes. This panel inherits from <code>KeyValueTablePanel</code>.</p>
@@ -11454,31 +11749,31 @@
11454
11749
  - `comments`, `tags` (these are automatically added as standalone panels)
11455
11750
  </code></pre></div>
11456
11751
  <h4 id="objectfieldspanel-examples">ObjectFieldsPanel Examples<a class="headerlink" href="#objectfieldspanel-examples" title="Permanent link">&para;</a></h4>
11457
- <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectFieldsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11458
- <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>
11459
- <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11460
- <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11461
- <a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
11462
- <a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
11463
- <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
11464
- <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="p">)</span>
11752
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectFieldsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11753
+ <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
11754
+ <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11755
+ <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11756
+ <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
11757
+ <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
11758
+ <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
11759
+ <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a><span class="p">)</span>
11465
11760
  </code></pre></div>
11466
- <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">ui</span>
11467
- <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="kn">from</span> <span class="nn">nautobot.core.templatetags</span> <span class="kn">import</span> <span class="n">helpers</span>
11468
- <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
11469
- <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
11470
- <a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="n">panels</span> <span class="o">=</span> <span class="n">ui</span><span class="o">.</span><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11471
- <a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
11472
- <a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a> <span class="n">section</span><span class="o">=</span><span class="n">ui</span><span class="o">.</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
11473
- <a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
11474
- <a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a> <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;number&quot;</span><span class="p">,</span> <span class="s2">&quot;notes&quot;</span><span class="p">,</span> <span class="s2">&quot;notexists&quot;</span><span class="p">],</span>
11475
- <a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
11476
- <a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a> <span class="n">ignore_nonexistent_fields</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11477
- <a id="__codelineno-5-12" name="__codelineno-5-12" href="#__codelineno-5-12"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
11478
- <a id="__codelineno-5-13" name="__codelineno-5-13" href="#__codelineno-5-13"></a> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">helpers</span><span class="o">.</span><span class="n">bettertitle</span><span class="p">],</span>
11479
- <a id="__codelineno-5-14" name="__codelineno-5-14" href="#__codelineno-5-14"></a> <span class="s2">&quot;number&quot;</span><span class="p">:</span> <span class="p">[</span><span class="k">lambda</span> <span class="n">v</span><span class="p">:</span> <span class="n">helpers</span><span class="o">.</span><span class="n">hyperlinked_field</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;https://nautobot.com&quot;</span><span class="p">)]</span>
11480
- <a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a> <span class="p">},</span>
11481
- <a id="__codelineno-5-16" name="__codelineno-5-16" href="#__codelineno-5-16"></a><span class="p">),</span>
11761
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">ui</span>
11762
+ <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="kn">from</span> <span class="nn">nautobot.core.templatetags</span> <span class="kn">import</span> <span class="n">helpers</span>
11763
+ <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a>
11764
+ <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>
11765
+ <a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="n">panels</span> <span class="o">=</span> <span class="n">ui</span><span class="o">.</span><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11766
+ <a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
11767
+ <a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a> <span class="n">section</span><span class="o">=</span><span class="n">ui</span><span class="o">.</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
11768
+ <a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Object Fields Panel&quot;</span><span class="p">,</span>
11769
+ <a id="__codelineno-11-9" name="__codelineno-11-9" href="#__codelineno-11-9"></a> <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;number&quot;</span><span class="p">,</span> <span class="s2">&quot;notes&quot;</span><span class="p">,</span> <span class="s2">&quot;notexists&quot;</span><span class="p">],</span>
11770
+ <a id="__codelineno-11-10" name="__codelineno-11-10" href="#__codelineno-11-10"></a> <span class="n">context_object_key</span><span class="o">=</span><span class="s2">&quot;obj&quot;</span><span class="p">,</span>
11771
+ <a id="__codelineno-11-11" name="__codelineno-11-11" href="#__codelineno-11-11"></a> <span class="n">ignore_nonexistent_fields</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11772
+ <a id="__codelineno-11-12" name="__codelineno-11-12" href="#__codelineno-11-12"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
11773
+ <a id="__codelineno-11-13" name="__codelineno-11-13" href="#__codelineno-11-13"></a> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">helpers</span><span class="o">.</span><span class="n">bettertitle</span><span class="p">],</span>
11774
+ <a id="__codelineno-11-14" name="__codelineno-11-14" href="#__codelineno-11-14"></a> <span class="s2">&quot;number&quot;</span><span class="p">:</span> <span class="p">[</span><span class="k">lambda</span> <span class="n">v</span><span class="p">:</span> <span class="n">helpers</span><span class="o">.</span><span class="n">hyperlinked_field</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">&quot;https://nautobot.com&quot;</span><span class="p">)]</span>
11775
+ <a id="__codelineno-11-15" name="__codelineno-11-15" href="#__codelineno-11-15"></a> <span class="p">},</span>
11776
+ <a id="__codelineno-11-16" name="__codelineno-11-16" href="#__codelineno-11-16"></a><span class="p">),</span>
11482
11777
  </code></pre></div>
11483
11778
  <!-- pyml disable-num-lines 5 no-inline-html -->
11484
11779
  <div class="grid cards example-images">
@@ -11495,63 +11790,63 @@
11495
11790
  </div>
11496
11791
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.KeyValueTablePanel">Code reference</a></p>
11497
11792
  <h4 id="keyvaluetablepanel-examples">KeyValueTablePanel Examples<a class="headerlink" href="#keyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
11498
- <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
11499
- <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>
11500
- <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
11501
- <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11502
- <a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11503
- <a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
11504
- <a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span>
11505
- <a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a> <span class="p">},</span>
11506
- <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="p">)</span>
11793
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
11794
+ <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
11795
+ <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
11796
+ <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11797
+ <a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11798
+ <a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
11799
+ <a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span>
11800
+ <a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a> <span class="p">},</span>
11801
+ <a id="__codelineno-12-9" name="__codelineno-12-9" href="#__codelineno-12-9"></a><span class="p">)</span>
11507
11802
  </code></pre></div>
11508
- <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
11509
- <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
11510
- <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
11511
- <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11512
- <a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11513
- <a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
11514
- <a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span><span class="p">,</span>
11515
- <a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a> <span class="p">},</span>
11516
- <a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a> <span class="n">hide_if_unset</span><span class="o">=</span><span class="p">(),</span>
11517
- <a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
11518
- <a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="c1"># List of functions to apply in order</span>
11519
- <a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a> <span class="n">humanize_speed</span><span class="p">,</span> <span class="c1"># Convert 1000000 to &quot;1 Gbps&quot;</span>
11520
- <a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
11521
- <a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a> <span class="p">],</span>
11522
- <a id="__codelineno-7-15" name="__codelineno-7-15" href="#__codelineno-7-15"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="p">[</span>
11523
- <a id="__codelineno-7-16" name="__codelineno-7-16" href="#__codelineno-7-16"></a> <span class="n">render_markdown</span><span class="p">,</span> <span class="c1"># Convert markdown to HTML</span>
11524
- <a id="__codelineno-7-17" name="__codelineno-7-17" href="#__codelineno-7-17"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
11525
- <a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a> <span class="p">]</span>
11526
- <a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a> <span class="p">},</span>
11527
- <a id="__codelineno-7-20" name="__codelineno-7-20" href="#__codelineno-7-20"></a><span class="p">)</span>
11803
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">KeyValueTablePanel</span>
11804
+ <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>
11805
+ <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
11806
+ <a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11807
+ <a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11808
+ <a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="s2">&quot;1000000&quot;</span><span class="p">,</span>
11809
+ <a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="s2">&quot;**Important**&quot;</span><span class="p">,</span>
11810
+ <a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a> <span class="p">},</span>
11811
+ <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a> <span class="n">hide_if_unset</span><span class="o">=</span><span class="p">(),</span>
11812
+ <a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a> <span class="n">value_transforms</span><span class="o">=</span><span class="p">{</span>
11813
+ <a id="__codelineno-13-11" name="__codelineno-13-11" href="#__codelineno-13-11"></a> <span class="s2">&quot;speed&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="c1"># List of functions to apply in order</span>
11814
+ <a id="__codelineno-13-12" name="__codelineno-13-12" href="#__codelineno-13-12"></a> <span class="n">humanize_speed</span><span class="p">,</span> <span class="c1"># Convert 1000000 to &quot;1 Gbps&quot;</span>
11815
+ <a id="__codelineno-13-13" name="__codelineno-13-13" href="#__codelineno-13-13"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
11816
+ <a id="__codelineno-13-14" name="__codelineno-13-14" href="#__codelineno-13-14"></a> <span class="p">],</span>
11817
+ <a id="__codelineno-13-15" name="__codelineno-13-15" href="#__codelineno-13-15"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="p">[</span>
11818
+ <a id="__codelineno-13-16" name="__codelineno-13-16" href="#__codelineno-13-16"></a> <span class="n">render_markdown</span><span class="p">,</span> <span class="c1"># Convert markdown to HTML</span>
11819
+ <a id="__codelineno-13-17" name="__codelineno-13-17" href="#__codelineno-13-17"></a> <span class="n">placeholder</span> <span class="c1"># Show placeholder if empty</span>
11820
+ <a id="__codelineno-13-18" name="__codelineno-13-18" href="#__codelineno-13-18"></a> <span class="p">]</span>
11821
+ <a id="__codelineno-13-19" name="__codelineno-13-19" href="#__codelineno-13-19"></a> <span class="p">},</span>
11822
+ <a id="__codelineno-13-20" name="__codelineno-13-20" href="#__codelineno-13-20"></a><span class="p">)</span>
11528
11823
  </code></pre></div>
11529
11824
  <h3 id="groupedkeyvaluetablepanel">GroupedKeyValueTablePanel<a class="headerlink" href="#groupedkeyvaluetablepanel" title="Permanent link">&para;</a></h3>
11530
11825
  <p><code>GroupedKeyValueTablePanel</code> is a specialized version of <code>KeyValueTablePanel</code> that organizes data into collapsible accordion groups. This is used in the standard template for displaying grouped custom/computed fields when present.</p>
11531
11826
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.GroupedKeyValueTablePanel">Code reference</a></p>
11532
11827
  <h4 id="groupedkeyvaluetablepanel-examples">GroupedKeyValueTablePanel Examples<a class="headerlink" href="#groupedkeyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
11533
- <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">GroupedKeyValueTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11534
- <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
11535
- <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
11536
- <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
11537
- <a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11538
- <a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Grouped Information&quot;</span><span class="p">,</span>
11539
- <a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;network-details&quot;</span><span class="p">,</span>
11540
- <a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a> <span class="c1"># Data Structure</span>
11541
- <a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11542
- <a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Group name (shown as accordion header)</span>
11543
- <a id="__codelineno-8-11" name="__codelineno-8-11" href="#__codelineno-8-11"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span> <span class="c1"># Key-value pairs in this group</span>
11544
- <a id="__codelineno-8-12" name="__codelineno-8-12" href="#__codelineno-8-12"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
11545
- <a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a> <span class="p">},</span>
11546
- <a id="__codelineno-8-14" name="__codelineno-8-14" href="#__codelineno-8-14"></a> <span class="s2">&quot;Physical&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Another group</span>
11547
- <a id="__codelineno-8-15" name="__codelineno-8-15" href="#__codelineno-8-15"></a> <span class="s2">&quot;Location&quot;</span><span class="p">:</span> <span class="s2">&quot;Rack A1&quot;</span><span class="p">,</span>
11548
- <a id="__codelineno-8-16" name="__codelineno-8-16" href="#__codelineno-8-16"></a> <span class="s2">&quot;Height&quot;</span><span class="p">:</span> <span class="s2">&quot;2U&quot;</span>
11549
- <a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a> <span class="p">},</span>
11550
- <a id="__codelineno-8-18" name="__codelineno-8-18" href="#__codelineno-8-18"></a> <span class="s2">&quot;&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Empty string for ungrouped items</span>
11551
- <a id="__codelineno-8-19" name="__codelineno-8-19" href="#__codelineno-8-19"></a> <span class="s2">&quot;Notes&quot;</span><span class="p">:</span> <span class="s2">&quot;Important info&quot;</span>
11552
- <a id="__codelineno-8-20" name="__codelineno-8-20" href="#__codelineno-8-20"></a> <span class="p">}</span>
11553
- <a id="__codelineno-8-21" name="__codelineno-8-21" href="#__codelineno-8-21"></a> <span class="p">},</span>
11554
- <a id="__codelineno-8-22" name="__codelineno-8-22" href="#__codelineno-8-22"></a><span class="p">)</span>
11828
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">GroupedKeyValueTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11829
+ <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
11830
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
11831
+ <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
11832
+ <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11833
+ <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Grouped Information&quot;</span><span class="p">,</span>
11834
+ <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;network-details&quot;</span><span class="p">,</span>
11835
+ <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> <span class="c1"># Data Structure</span>
11836
+ <a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11837
+ <a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Group name (shown as accordion header)</span>
11838
+ <a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span> <span class="c1"># Key-value pairs in this group</span>
11839
+ <a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
11840
+ <a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> <span class="p">},</span>
11841
+ <a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> <span class="s2">&quot;Physical&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Another group</span>
11842
+ <a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a> <span class="s2">&quot;Location&quot;</span><span class="p">:</span> <span class="s2">&quot;Rack A1&quot;</span><span class="p">,</span>
11843
+ <a id="__codelineno-14-16" name="__codelineno-14-16" href="#__codelineno-14-16"></a> <span class="s2">&quot;Height&quot;</span><span class="p">:</span> <span class="s2">&quot;2U&quot;</span>
11844
+ <a id="__codelineno-14-17" name="__codelineno-14-17" href="#__codelineno-14-17"></a> <span class="p">},</span>
11845
+ <a id="__codelineno-14-18" name="__codelineno-14-18" href="#__codelineno-14-18"></a> <span class="s2">&quot;&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># Empty string for ungrouped items</span>
11846
+ <a id="__codelineno-14-19" name="__codelineno-14-19" href="#__codelineno-14-19"></a> <span class="s2">&quot;Notes&quot;</span><span class="p">:</span> <span class="s2">&quot;Important info&quot;</span>
11847
+ <a id="__codelineno-14-20" name="__codelineno-14-20" href="#__codelineno-14-20"></a> <span class="p">}</span>
11848
+ <a id="__codelineno-14-21" name="__codelineno-14-21" href="#__codelineno-14-21"></a> <span class="p">},</span>
11849
+ <a id="__codelineno-14-22" name="__codelineno-14-22" href="#__codelineno-14-22"></a><span class="p">)</span>
11555
11850
  </code></pre></div>
11556
11851
  <!-- pyml disable-num-lines 7 no-inline-html -->
11557
11852
  <div class="grid cards example-images">
@@ -11568,23 +11863,23 @@
11568
11863
  <p><code>StatsPanel</code> is a Panel component that displays statistical information with clickable links to filtered views of related models. It's particularly useful for dashboards and summary views that provide quick access to filtered data sets.</p>
11569
11864
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.StatsPanel">Code reference</a></p>
11570
11865
  <h4 id="statspanel-examples">StatsPanel Examples<a class="headerlink" href="#statspanel-examples" title="Permanent link">&para;</a></h4>
11571
- <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">StatsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11572
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
11573
- <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">StatsPanel</span><span class="p">(</span>
11574
- <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">700</span><span class="p">,</span>
11575
- <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
11576
- <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Statistics&quot;</span><span class="p">,</span>
11577
- <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
11578
- <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span> <span class="c1"># Models to show statistics for</span>
11579
- <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a> <span class="n">Device</span><span class="p">,</span> <span class="c1"># Direct model reference</span>
11580
- <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a> <span class="c1"># Will count all devices related to this object by their `location` key</span>
11581
- <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">),</span>
11582
- <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a> <span class="c1"># Tuple of (Model, query_string)</span>
11583
- <a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a> <span class="c1"># For complex relationships</span>
11584
- <a id="__codelineno-9-14" name="__codelineno-9-14" href="#__codelineno-9-14"></a> <span class="p">(</span><span class="n">VirtualMachine</span><span class="p">,</span> <span class="s2">&quot;cluster__location__in&quot;</span><span class="p">)</span>
11585
- <a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a> <span class="c1"># Another complex relationship example</span>
11586
- <a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a> <span class="p">],</span>
11587
- <a id="__codelineno-9-17" name="__codelineno-9-17" href="#__codelineno-9-17"></a><span class="p">)</span>
11866
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">StatsPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11867
+ <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>
11868
+ <a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a><span class="n">StatsPanel</span><span class="p">(</span>
11869
+ <a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">700</span><span class="p">,</span>
11870
+ <a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
11871
+ <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Statistics&quot;</span><span class="p">,</span>
11872
+ <a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
11873
+ <a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span> <span class="c1"># Models to show statistics for</span>
11874
+ <a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a> <span class="n">Device</span><span class="p">,</span> <span class="c1"># Direct model reference</span>
11875
+ <a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a> <span class="c1"># Will count all devices related to this object by their `location` key</span>
11876
+ <a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">),</span>
11877
+ <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a> <span class="c1"># Tuple of (Model, query_string)</span>
11878
+ <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a> <span class="c1"># For complex relationships</span>
11879
+ <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a> <span class="p">(</span><span class="n">VirtualMachine</span><span class="p">,</span> <span class="s2">&quot;cluster__location__in&quot;</span><span class="p">)</span>
11880
+ <a id="__codelineno-15-15" name="__codelineno-15-15" href="#__codelineno-15-15"></a> <span class="c1"># Another complex relationship example</span>
11881
+ <a id="__codelineno-15-16" name="__codelineno-15-16" href="#__codelineno-15-16"></a> <span class="p">],</span>
11882
+ <a id="__codelineno-15-17" name="__codelineno-15-17" href="#__codelineno-15-17"></a><span class="p">)</span>
11588
11883
  </code></pre></div>
11589
11884
  <!-- pyml disable-num-lines 5 no-inline-html -->
11590
11885
  <div class="grid cards example-images">
@@ -11606,31 +11901,31 @@
11606
11901
  <p><code>ObjectTextPanel</code> renders content from a specific field of an object in the context. It simplifies the display of object attributes in various text formats (Markdown, JSON, YAML, etc.).</p>
11607
11902
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ObjectTextPanel">Code reference</a></p>
11608
11903
  <h4 id="objecttextpanel-examples">ObjectTextPanel Examples<a class="headerlink" href="#objecttextpanel-examples" title="Permanent link">&para;</a></h4>
11609
- <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectTextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11610
- <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
11611
- <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="n">ObjectTextPanel</span><span class="p">(</span>
11612
- <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
11613
- <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11614
- <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Description&quot;</span><span class="p">,</span>
11615
- <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
11616
- <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">ObjectTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
11617
- <a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11618
- <a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a><span class="p">)</span>
11904
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectTextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11905
+ <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>
11906
+ <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="n">ObjectTextPanel</span><span class="p">(</span>
11907
+ <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
11908
+ <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11909
+ <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Description&quot;</span><span class="p">,</span>
11910
+ <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
11911
+ <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">ObjectTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
11912
+ <a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11913
+ <a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a><span class="p">)</span>
11619
11914
  </code></pre></div>
11620
11915
  <h3 id="textpanel">TextPanel<a class="headerlink" href="#textpanel" title="Permanent link">&para;</a></h3>
11621
11916
  <p><code>TextPanel</code> renders content from a specified context field. It provides a simple way to display text content in various formats (Markdown, JSON, YAML, plaintext, or code) from the rendering context.</p>
11622
11917
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.TextPanel">Code reference</a></p>
11623
11918
  <h4 id="textpanel-examples">TextPanel Examples<a class="headerlink" href="#textpanel-examples" title="Permanent link">&para;</a></h4>
11624
- <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">TextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11625
- <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>
11626
- <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="n">TextPanel</span><span class="p">(</span>
11627
- <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span>
11628
- <a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11629
- <a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Custom Content&quot;</span><span class="p">,</span>
11630
- <a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a> <span class="n">context_field</span><span class="o">=</span><span class="s2">&quot;text&quot;</span><span class="p">,</span>
11631
- <a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">TextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">CODE</span><span class="p">,</span>
11632
- <a id="__codelineno-11-9" name="__codelineno-11-9" href="#__codelineno-11-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11633
- <a id="__codelineno-11-10" name="__codelineno-11-10" href="#__codelineno-11-10"></a><span class="p">)</span>
11919
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">TextPanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11920
+ <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>
11921
+ <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a><span class="n">TextPanel</span><span class="p">(</span>
11922
+ <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span>
11923
+ <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11924
+ <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Custom Content&quot;</span><span class="p">,</span>
11925
+ <a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a> <span class="n">context_field</span><span class="o">=</span><span class="s2">&quot;text&quot;</span><span class="p">,</span>
11926
+ <a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">TextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">CODE</span><span class="p">,</span>
11927
+ <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a> <span class="n">render_placeholder</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11928
+ <a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a><span class="p">)</span>
11634
11929
  </code></pre></div>
11635
11930
  <h3 id="datatablepanel">DataTablePanel<a class="headerlink" href="#datatablepanel" title="Permanent link">&para;</a></h3>
11636
11931
  <p><code>DataTablePanel</code> is a Panel component that renders tabular data directly from a list of dictionaries, providing a lightweight alternative to <code>django_tables2</code> Table classes.</p>
@@ -11644,14 +11939,14 @@
11644
11939
  </ul>
11645
11940
  </div>
11646
11941
  <h4 id="datatablepanel-examples">DataTablePanel Examples<a class="headerlink" href="#datatablepanel-examples" title="Permanent link">&para;</a></h4>
11647
- <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">DataTablePanel</span>
11648
- <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
11649
- <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="n">DataTablePanel</span><span class="p">(</span>
11650
- <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11651
- <a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a> <span class="n">context_data_key</span><span class="o">=</span><span class="s2">&quot;data&quot;</span><span class="p">,</span>
11652
- <a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;one&quot;</span><span class="p">,</span> <span class="s2">&quot;two&quot;</span><span class="p">,</span> <span class="s2">&quot;three&quot;</span><span class="p">],</span>
11653
- <a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a> <span class="n">column_headers</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;One&quot;</span><span class="p">,</span> <span class="s2">&quot;Two&quot;</span><span class="p">,</span> <span class="s2">&quot;Three&quot;</span><span class="p">]</span>
11654
- <a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="p">)</span>
11942
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">DataTablePanel</span>
11943
+ <a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>
11944
+ <a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="n">DataTablePanel</span><span class="p">(</span>
11945
+ <a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11946
+ <a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a> <span class="n">context_data_key</span><span class="o">=</span><span class="s2">&quot;data&quot;</span><span class="p">,</span>
11947
+ <a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;one&quot;</span><span class="p">,</span> <span class="s2">&quot;two&quot;</span><span class="p">,</span> <span class="s2">&quot;three&quot;</span><span class="p">],</span>
11948
+ <a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a> <span class="n">column_headers</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;One&quot;</span><span class="p">,</span> <span class="s2">&quot;Two&quot;</span><span class="p">,</span> <span class="s2">&quot;Three&quot;</span><span class="p">]</span>
11949
+ <a id="__codelineno-18-8" name="__codelineno-18-8" href="#__codelineno-18-8"></a><span class="p">)</span>
11655
11950
  </code></pre></div>
11656
11951
  <h3 id="objectstablepanel">ObjectsTablePanel<a class="headerlink" href="#objectstablepanel" title="Permanent link">&para;</a></h3>
11657
11952
  <p>The <code>ObjectsTablePanel</code> is a powerful component for rendering tables of Django model objects,
@@ -11808,52 +12103,52 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11808
12103
  </tbody>
11809
12104
  </table>
11810
12105
  <h4 id="objectstablepanel-examples">ObjectsTablePanel Examples<a class="headerlink" href="#objectstablepanel-examples" title="Permanent link">&para;</a></h4>
11811
- <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11812
- <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>
11813
- <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
11814
- <a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11815
- <a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
11816
- <a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a> <span class="n">table_class</span><span class="o">=</span><span class="n">ExampleTable</span><span class="p">,</span>
11817
- <a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a> <span class="n">table_filter</span><span class="o">=</span><span class="s2">&quot;example_name&quot;</span><span class="p">,</span>
11818
- <a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
11819
- <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a>
11820
- <a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a><span class="p">)</span>
12106
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
12107
+ <a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a>
12108
+ <a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
12109
+ <a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
12110
+ <a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
12111
+ <a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a> <span class="n">table_class</span><span class="o">=</span><span class="n">ExampleTable</span><span class="p">,</span>
12112
+ <a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a> <span class="n">table_filter</span><span class="o">=</span><span class="s2">&quot;example_name&quot;</span><span class="p">,</span>
12113
+ <a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
12114
+ <a id="__codelineno-19-9" name="__codelineno-19-9" href="#__codelineno-19-9"></a>
12115
+ <a id="__codelineno-19-10" name="__codelineno-19-10" href="#__codelineno-19-10"></a><span class="p">)</span>
11821
12116
  </code></pre></div>
11822
- <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
11823
- <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
11824
- <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
11825
- <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
11826
- <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11827
- <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> <span class="n">context_table_key</span><span class="o">=</span><span class="s2">&quot;example_table_instance&quot;</span><span class="p">,</span>
11828
- <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
11829
- <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> <span class="n">hide_hierarchy_ui</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11830
- <a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> <span class="n">related_field_name</span><span class="o">=</span><span class="s2">&quot;example_id&quot;</span><span class="p">,</span>
11831
- <a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> <span class="n">enable_bulk_actions</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
11832
- <a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> <span class="n">add_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim:add_device&quot;</span><span class="p">],</span>
11833
- <a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> <span class="n">max_display_count</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
11834
- <a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> <span class="n">prefetch_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;devices&quot;</span><span class="p">],</span>
11835
- <a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> <span class="n">select_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;manufacturers&quot;</span><span class="p">,</span> <span class="s2">&quot;locations&quot;</span><span class="p">],</span>
11836
- <a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a><span class="p">)</span>
12117
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="n">ObjectsTablePanel</span><span class="p">,</span> <span class="n">SectionChoices</span>
12118
+ <a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>
12119
+ <a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
12120
+ <a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
12121
+ <a id="__codelineno-20-5" name="__codelineno-20-5" href="#__codelineno-20-5"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
12122
+ <a id="__codelineno-20-6" name="__codelineno-20-6" href="#__codelineno-20-6"></a> <span class="n">context_table_key</span><span class="o">=</span><span class="s2">&quot;example_table_instance&quot;</span><span class="p">,</span>
12123
+ <a id="__codelineno-20-7" name="__codelineno-20-7" href="#__codelineno-20-7"></a> <span class="n">table_title</span><span class="o">=</span><span class="s2">&quot;Example Table&quot;</span><span class="p">,</span>
12124
+ <a id="__codelineno-20-8" name="__codelineno-20-8" href="#__codelineno-20-8"></a> <span class="n">hide_hierarchy_ui</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
12125
+ <a id="__codelineno-20-9" name="__codelineno-20-9" href="#__codelineno-20-9"></a> <span class="n">related_field_name</span><span class="o">=</span><span class="s2">&quot;example_id&quot;</span><span class="p">,</span>
12126
+ <a id="__codelineno-20-10" name="__codelineno-20-10" href="#__codelineno-20-10"></a> <span class="n">enable_bulk_actions</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
12127
+ <a id="__codelineno-20-11" name="__codelineno-20-11" href="#__codelineno-20-11"></a> <span class="n">add_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim:add_device&quot;</span><span class="p">],</span>
12128
+ <a id="__codelineno-20-12" name="__codelineno-20-12" href="#__codelineno-20-12"></a> <span class="n">max_display_count</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
12129
+ <a id="__codelineno-20-13" name="__codelineno-20-13" href="#__codelineno-20-13"></a> <span class="n">prefetch_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;devices&quot;</span><span class="p">],</span>
12130
+ <a id="__codelineno-20-14" name="__codelineno-20-14" href="#__codelineno-20-14"></a> <span class="n">select_related_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;manufacturers&quot;</span><span class="p">,</span> <span class="s2">&quot;locations&quot;</span><span class="p">],</span>
12131
+ <a id="__codelineno-20-15" name="__codelineno-20-15" href="#__codelineno-20-15"></a><span class="p">)</span>
11837
12132
  </code></pre></div>
11838
12133
  <h2 id="button-types">Button Types<a class="headerlink" href="#button-types" title="Permanent link">&para;</a></h2>
11839
12134
  <h3 id="button">Button<a class="headerlink" href="#button" title="Permanent link">&para;</a></h3>
11840
12135
  <p>The Button component defines a single button in an object detail view.</p>
11841
12136
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Button">Code reference</a></p>
11842
12137
  <h4 id="button-examples">Button Examples<a class="headerlink" href="#button-examples" title="Permanent link">&para;</a></h4>
11843
- <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">class</span> <span class="nc">SecretUIViewSet</span><span class="p">(</span><span class="o">...</span><span class="p">):</span>
11844
- <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a> <span class="o">...</span>
11845
- <a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
11846
- <a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span><span class="o">...</span><span class="p">],</span>
11847
- <a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
11848
- <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> <span class="n">Button</span><span class="p">(</span>
11849
- <a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11850
- <a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Check Secret&quot;</span><span class="p">,</span>
11851
- <a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-test-tube&quot;</span><span class="p">,</span>
11852
- <a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a> <span class="n">javascript_template_path</span><span class="o">=</span><span class="s2">&quot;extras/secret_check.js&quot;</span><span class="p">,</span>
11853
- <a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a> <span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;onClick&quot;</span><span class="p">:</span> <span class="s2">&quot;checkSecret()&quot;</span><span class="p">},</span>
11854
- <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a> <span class="p">),</span>
11855
- <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a> <span class="p">],</span>
11856
- <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a> <span class="p">)</span>
12138
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="k">class</span> <span class="nc">SecretUIViewSet</span><span class="p">(</span><span class="o">...</span><span class="p">):</span>
12139
+ <a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a> <span class="o">...</span>
12140
+ <a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
12141
+ <a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span><span class="o">...</span><span class="p">],</span>
12142
+ <a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
12143
+ <a id="__codelineno-21-6" name="__codelineno-21-6" href="#__codelineno-21-6"></a> <span class="n">Button</span><span class="p">(</span>
12144
+ <a id="__codelineno-21-7" name="__codelineno-21-7" href="#__codelineno-21-7"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
12145
+ <a id="__codelineno-21-8" name="__codelineno-21-8" href="#__codelineno-21-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Check Secret&quot;</span><span class="p">,</span>
12146
+ <a id="__codelineno-21-9" name="__codelineno-21-9" href="#__codelineno-21-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-test-tube&quot;</span><span class="p">,</span>
12147
+ <a id="__codelineno-21-10" name="__codelineno-21-10" href="#__codelineno-21-10"></a> <span class="n">javascript_template_path</span><span class="o">=</span><span class="s2">&quot;extras/secret_check.js&quot;</span><span class="p">,</span>
12148
+ <a id="__codelineno-21-11" name="__codelineno-21-11" href="#__codelineno-21-11"></a> <span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;onClick&quot;</span><span class="p">:</span> <span class="s2">&quot;checkSecret()&quot;</span><span class="p">},</span>
12149
+ <a id="__codelineno-21-12" name="__codelineno-21-12" href="#__codelineno-21-12"></a> <span class="p">),</span>
12150
+ <a id="__codelineno-21-13" name="__codelineno-21-13" href="#__codelineno-21-13"></a> <span class="p">],</span>
12151
+ <a id="__codelineno-21-14" name="__codelineno-21-14" href="#__codelineno-21-14"></a> <span class="p">)</span>
11857
12152
  </code></pre></div>
11858
12153
  <!-- pyml disable-num-lines 5 no-inline-html -->
11859
12154
  <div class="grid cards example-images">
@@ -11865,36 +12160,36 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11865
12160
  <p><code>DropdownButton</code> is a subclass of <code>Button</code> that may itself contain other <code>Buttons</code> as its <code>children</code>, which it will render as a dropdown menu. For an example of usage, refer to the <code>Add Components</code> dropdown on the Device detail view.</p>
11866
12161
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.DropdownButton">Code reference</a></p>
11867
12162
  <h4 id="dropdownbutton-examples">DropdownButton Examples<a class="headerlink" href="#dropdownbutton-examples" title="Permanent link">&para;</a></h4>
11868
- <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="k">class</span> <span class="nc">DeviceView</span><span class="p">(</span><span class="n">generic</span><span class="o">.</span><span class="n">ObjectView</span><span class="p">):</span>
11869
- <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> <span class="o">...</span>
11870
- <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
11871
- <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
11872
- <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">DropdownButton</span><span class="p">(</span>
11873
- <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11874
- <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a> <span class="n">color</span><span class="o">=</span><span class="n">ButtonColorChoices</span><span class="o">.</span><span class="n">BLUE</span><span class="p">,</span>
11875
- <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Add Components&quot;</span><span class="p">,</span>
11876
- <a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-plus-thick&quot;</span><span class="p">,</span>
11877
- <a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.change_device&quot;</span><span class="p">],</span>
11878
- <a id="__codelineno-16-11" name="__codelineno-16-11" href="#__codelineno-16-11"></a> <span class="n">children</span><span class="o">=</span><span class="p">(</span>
11879
- <a id="__codelineno-16-12" name="__codelineno-16-12" href="#__codelineno-16-12"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
11880
- <a id="__codelineno-16-13" name="__codelineno-16-13" href="#__codelineno-16-13"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11881
- <a id="__codelineno-16-14" name="__codelineno-16-14" href="#__codelineno-16-14"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleports_add&quot;</span><span class="p">,</span>
11882
- <a id="__codelineno-16-15" name="__codelineno-16-15" href="#__codelineno-16-15"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Ports&quot;</span><span class="p">,</span>
11883
- <a id="__codelineno-16-16" name="__codelineno-16-16" href="#__codelineno-16-16"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console&quot;</span><span class="p">,</span>
11884
- <a id="__codelineno-16-17" name="__codelineno-16-17" href="#__codelineno-16-17"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleport&quot;</span><span class="p">],</span>
11885
- <a id="__codelineno-16-18" name="__codelineno-16-18" href="#__codelineno-16-18"></a> <span class="p">),</span>
11886
- <a id="__codelineno-16-19" name="__codelineno-16-19" href="#__codelineno-16-19"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
11887
- <a id="__codelineno-16-20" name="__codelineno-16-20" href="#__codelineno-16-20"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
11888
- <a id="__codelineno-16-21" name="__codelineno-16-21" href="#__codelineno-16-21"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleserverports_add&quot;</span><span class="p">,</span>
11889
- <a id="__codelineno-16-22" name="__codelineno-16-22" href="#__codelineno-16-22"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Server Ports&quot;</span><span class="p">,</span>
11890
- <a id="__codelineno-16-23" name="__codelineno-16-23" href="#__codelineno-16-23"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console-network-outline&quot;</span><span class="p">,</span>
11891
- <a id="__codelineno-16-24" name="__codelineno-16-24" href="#__codelineno-16-24"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleserverport&quot;</span><span class="p">],</span>
11892
- <a id="__codelineno-16-25" name="__codelineno-16-25" href="#__codelineno-16-25"></a> <span class="p">),</span>
11893
- <a id="__codelineno-16-26" name="__codelineno-16-26" href="#__codelineno-16-26"></a> <span class="o">...</span>
11894
- <a id="__codelineno-16-27" name="__codelineno-16-27" href="#__codelineno-16-27"></a> <span class="p">),</span>
11895
- <a id="__codelineno-16-28" name="__codelineno-16-28" href="#__codelineno-16-28"></a> <span class="p">),</span>
11896
- <a id="__codelineno-16-29" name="__codelineno-16-29" href="#__codelineno-16-29"></a> <span class="p">],</span>
11897
- <a id="__codelineno-16-30" name="__codelineno-16-30" href="#__codelineno-16-30"></a> <span class="p">)</span>
12163
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="k">class</span> <span class="nc">DeviceView</span><span class="p">(</span><span class="n">generic</span><span class="o">.</span><span class="n">ObjectView</span><span class="p">):</span>
12164
+ <a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a> <span class="o">...</span>
12165
+ <a id="__codelineno-22-3" name="__codelineno-22-3" href="#__codelineno-22-3"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
12166
+ <a id="__codelineno-22-4" name="__codelineno-22-4" href="#__codelineno-22-4"></a> <span class="n">extra_buttons</span><span class="o">=</span><span class="p">[</span>
12167
+ <a id="__codelineno-22-5" name="__codelineno-22-5" href="#__codelineno-22-5"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">DropdownButton</span><span class="p">(</span>
12168
+ <a id="__codelineno-22-6" name="__codelineno-22-6" href="#__codelineno-22-6"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
12169
+ <a id="__codelineno-22-7" name="__codelineno-22-7" href="#__codelineno-22-7"></a> <span class="n">color</span><span class="o">=</span><span class="n">ButtonColorChoices</span><span class="o">.</span><span class="n">BLUE</span><span class="p">,</span>
12170
+ <a id="__codelineno-22-8" name="__codelineno-22-8" href="#__codelineno-22-8"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Add Components&quot;</span><span class="p">,</span>
12171
+ <a id="__codelineno-22-9" name="__codelineno-22-9" href="#__codelineno-22-9"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-plus-thick&quot;</span><span class="p">,</span>
12172
+ <a id="__codelineno-22-10" name="__codelineno-22-10" href="#__codelineno-22-10"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.change_device&quot;</span><span class="p">],</span>
12173
+ <a id="__codelineno-22-11" name="__codelineno-22-11" href="#__codelineno-22-11"></a> <span class="n">children</span><span class="o">=</span><span class="p">(</span>
12174
+ <a id="__codelineno-22-12" name="__codelineno-22-12" href="#__codelineno-22-12"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
12175
+ <a id="__codelineno-22-13" name="__codelineno-22-13" href="#__codelineno-22-13"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
12176
+ <a id="__codelineno-22-14" name="__codelineno-22-14" href="#__codelineno-22-14"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleports_add&quot;</span><span class="p">,</span>
12177
+ <a id="__codelineno-22-15" name="__codelineno-22-15" href="#__codelineno-22-15"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Ports&quot;</span><span class="p">,</span>
12178
+ <a id="__codelineno-22-16" name="__codelineno-22-16" href="#__codelineno-22-16"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console&quot;</span><span class="p">,</span>
12179
+ <a id="__codelineno-22-17" name="__codelineno-22-17" href="#__codelineno-22-17"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleport&quot;</span><span class="p">],</span>
12180
+ <a id="__codelineno-22-18" name="__codelineno-22-18" href="#__codelineno-22-18"></a> <span class="p">),</span>
12181
+ <a id="__codelineno-22-19" name="__codelineno-22-19" href="#__codelineno-22-19"></a> <span class="n">object_detail</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span>
12182
+ <a id="__codelineno-22-20" name="__codelineno-22-20" href="#__codelineno-22-20"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
12183
+ <a id="__codelineno-22-21" name="__codelineno-22-21" href="#__codelineno-22-21"></a> <span class="n">link_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_consoleserverports_add&quot;</span><span class="p">,</span>
12184
+ <a id="__codelineno-22-22" name="__codelineno-22-22" href="#__codelineno-22-22"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Console Server Ports&quot;</span><span class="p">,</span>
12185
+ <a id="__codelineno-22-23" name="__codelineno-22-23" href="#__codelineno-22-23"></a> <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;mdi-console-network-outline&quot;</span><span class="p">,</span>
12186
+ <a id="__codelineno-22-24" name="__codelineno-22-24" href="#__codelineno-22-24"></a> <span class="n">required_permissions</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;dcim.add_consoleserverport&quot;</span><span class="p">],</span>
12187
+ <a id="__codelineno-22-25" name="__codelineno-22-25" href="#__codelineno-22-25"></a> <span class="p">),</span>
12188
+ <a id="__codelineno-22-26" name="__codelineno-22-26" href="#__codelineno-22-26"></a> <span class="o">...</span>
12189
+ <a id="__codelineno-22-27" name="__codelineno-22-27" href="#__codelineno-22-27"></a> <span class="p">),</span>
12190
+ <a id="__codelineno-22-28" name="__codelineno-22-28" href="#__codelineno-22-28"></a> <span class="p">),</span>
12191
+ <a id="__codelineno-22-29" name="__codelineno-22-29" href="#__codelineno-22-29"></a> <span class="p">],</span>
12192
+ <a id="__codelineno-22-30" name="__codelineno-22-30" href="#__codelineno-22-30"></a> <span class="p">)</span>
11898
12193
  </code></pre></div>
11899
12194
  <!-- pyml disable-num-lines 5 no-inline-html -->
11900
12195
  <div class="grid cards example-images">
@@ -11902,54 +12197,194 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11902
12197
  <li><a class="glightbox" href="../../media/development/core/ui-component-framework/dropdown-button-example.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="DropdownButton Example" class="on-glb" src="../../media/development/core/ui-component-framework/dropdown-button-example.png" /></a></li>
11903
12198
  </ul>
11904
12199
  </div>
12200
+ <h2 id="breadcrumbs-and-titles-overview">Breadcrumbs and titles overview<a class="headerlink" href="#breadcrumbs-and-titles-overview" title="Permanent link">&para;</a></h2>
12201
+ <p>High-level data flow diagram:</p>
12202
+ <!-- pyml disable-num-lines 5 no-inline-html -->
12203
+ <div class="grid cards example-images">
12204
+ <ul>
12205
+ <li><a class="glightbox" href="../../media/development/core/ui-component-framework/breadcrumbs-titles-data-flow.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="Breadcrumbs and titles data flow" class="on-glb" src="../../media/development/core/ui-component-framework/breadcrumbs-titles-data-flow.png" /></a></li>
12206
+ </ul>
12207
+ </div>
12208
+ <h3 id="breadcrumbitem-configuration">BreadcrumbItem Configuration<a class="headerlink" href="#breadcrumbitem-configuration" title="Permanent link">&para;</a></h3>
12209
+ <p>Breadcrumb items has three main type of items.</p>
12210
+ <ul>
12211
+ <li><code>ViewNameBreadcrumbItem</code>: Creates a breadcrumb from a Django view name (string or callable), with optional URL kwargs and query params. The label can be static or dynamic.</li>
12212
+ <li><code>ModelBreadcrumbItem</code>: Generates a breadcrumb based on a Django model class, instance, or dotted model string. Supports resolving list/detail URLs and model verbose names for the label.</li>
12213
+ <li><code>InstanceBreadcrumbItem</code>: Represents a breadcrumb for a specific object instance (fetched from context). The URL and label are resolved from the object’s absolute URL and display/name.</li>
12214
+ </ul>
12215
+ <p>All breadcrumb items accept a <code>should_render</code> callable to control visibility based on context, and are automatically filtered out if both their URL and label are empty.
12216
+ Labels can be rendered either by using simple str, passing object that has <code>__str__</code> method, passing callable that accepts context or by taking it from context via <code>label_key</code>.</p>
12217
+ <h4 id="viewnamebreadcrumbitem-class"><code>ViewNameBreadcrumbItem</code> Class<a class="headerlink" href="#viewnamebreadcrumbitem-class" title="Permanent link">&para;</a></h4>
12218
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="c1"># Basic view name breadcrumb</span>
12219
+ <a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span>
12220
+ <a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a> <span class="n">view_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_list&quot;</span><span class="p">,</span>
12221
+ <a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;All Devices&quot;</span><span class="p">,</span>
12222
+ <a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a><span class="p">)</span>
12223
+ <a id="__codelineno-23-6" name="__codelineno-23-6" href="#__codelineno-23-6"></a><span class="c1"># Will generate: (&quot;/dcim/devices/&quot;, &quot;All Devices&quot;)</span>
12224
+ <a id="__codelineno-23-7" name="__codelineno-23-7" href="#__codelineno-23-7"></a>
12225
+ <a id="__codelineno-23-8" name="__codelineno-23-8" href="#__codelineno-23-8"></a><span class="c1"># Basic view name from context breadcrumb</span>
12226
+ <a id="__codelineno-23-9" name="__codelineno-23-9" href="#__codelineno-23-9"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span>
12227
+ <a id="__codelineno-23-10" name="__codelineno-23-10" href="#__codelineno-23-10"></a> <span class="n">view_name_key</span><span class="o">=</span><span class="s2">&quot;list_url&quot;</span><span class="p">,</span>
12228
+ <a id="__codelineno-23-11" name="__codelineno-23-11" href="#__codelineno-23-11"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;All Devices&quot;</span><span class="p">,</span>
12229
+ <a id="__codelineno-23-12" name="__codelineno-23-12" href="#__codelineno-23-12"></a><span class="p">)</span>
12230
+ <a id="__codelineno-23-13" name="__codelineno-23-13" href="#__codelineno-23-13"></a><span class="c1"># Will generate: (&quot;/dcim/devices/&quot;, &quot;All Devices&quot;); assuming there is &quot;dcim:device_list&quot; in context[&quot;list_url&quot;]</span>
12231
+ <a id="__codelineno-23-14" name="__codelineno-23-14" href="#__codelineno-23-14"></a>
12232
+ <a id="__codelineno-23-15" name="__codelineno-23-15" href="#__codelineno-23-15"></a><span class="c1"># With reverse parameters</span>
12233
+ <a id="__codelineno-23-16" name="__codelineno-23-16" href="#__codelineno-23-16"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span>
12234
+ <a id="__codelineno-23-17" name="__codelineno-23-17" href="#__codelineno-23-17"></a> <span class="n">view_name</span><span class="o">=</span><span class="s2">&quot;dcim:device&quot;</span><span class="p">,</span>
12235
+ <a id="__codelineno-23-18" name="__codelineno-23-18" href="#__codelineno-23-18"></a> <span class="n">reverse_kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;pk&quot;</span><span class="p">:</span> <span class="mi">123</span><span class="p">},</span>
12236
+ <a id="__codelineno-23-19" name="__codelineno-23-19" href="#__codelineno-23-19"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Device Details&quot;</span><span class="p">,</span>
12237
+ <a id="__codelineno-23-20" name="__codelineno-23-20" href="#__codelineno-23-20"></a><span class="p">)</span>
12238
+ <a id="__codelineno-23-21" name="__codelineno-23-21" href="#__codelineno-23-21"></a><span class="c1"># Will generate: (&quot;/dcim/devices/123&quot;, &quot;Device Details&quot;)</span>
12239
+ <a id="__codelineno-23-22" name="__codelineno-23-22" href="#__codelineno-23-22"></a>
12240
+ <a id="__codelineno-23-23" name="__codelineno-23-23" href="#__codelineno-23-23"></a><span class="c1"># With query parameters</span>
12241
+ <a id="__codelineno-23-24" name="__codelineno-23-24" href="#__codelineno-23-24"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span>
12242
+ <a id="__codelineno-23-25" name="__codelineno-23-25" href="#__codelineno-23-25"></a> <span class="n">view_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_list&quot;</span><span class="p">,</span>
12243
+ <a id="__codelineno-23-26" name="__codelineno-23-26" href="#__codelineno-23-26"></a> <span class="n">reverse_query_params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;status&quot;</span><span class="p">:</span> <span class="s2">&quot;active&quot;</span><span class="p">},</span>
12244
+ <a id="__codelineno-23-27" name="__codelineno-23-27" href="#__codelineno-23-27"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Active Devices&quot;</span><span class="p">,</span>
12245
+ <a id="__codelineno-23-28" name="__codelineno-23-28" href="#__codelineno-23-28"></a><span class="p">)</span>
12246
+ <a id="__codelineno-23-29" name="__codelineno-23-29" href="#__codelineno-23-29"></a><span class="c1"># Will generate: (&quot;/dcim/devices/?status=active&quot;, &quot;Active Devices&quot;)</span>
12247
+ <a id="__codelineno-23-30" name="__codelineno-23-30" href="#__codelineno-23-30"></a>
12248
+ <a id="__codelineno-23-31" name="__codelineno-23-31" href="#__codelineno-23-31"></a><span class="c1"># With dynamic parameters from context</span>
12249
+ <a id="__codelineno-23-32" name="__codelineno-23-32" href="#__codelineno-23-32"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span>
12250
+ <a id="__codelineno-23-33" name="__codelineno-23-33" href="#__codelineno-23-33"></a> <span class="n">view_name</span><span class="o">=</span><span class="s2">&quot;dcim:device_detail&quot;</span><span class="p">,</span>
12251
+ <a id="__codelineno-23-34" name="__codelineno-23-34" href="#__codelineno-23-34"></a> <span class="n">reverse_kwargs</span><span class="o">=</span><span class="k">lambda</span> <span class="n">ctx</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;pk&quot;</span><span class="p">:</span> <span class="n">ctx</span><span class="p">[</span><span class="s2">&quot;object&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pk</span><span class="p">},</span>
12252
+ <a id="__codelineno-23-35" name="__codelineno-23-35" href="#__codelineno-23-35"></a> <span class="n">label</span><span class="o">=</span><span class="k">lambda</span> <span class="n">ctx</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Device: </span><span class="si">{</span><span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;object&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
12253
+ <a id="__codelineno-23-36" name="__codelineno-23-36" href="#__codelineno-23-36"></a><span class="p">)</span>
12254
+ </code></pre></div>
12255
+ <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ViewNameBreadcrumbItem">Code reference</a></p>
12256
+ <h4 id="modelbreadcrumbitem-class"><code>ModelBreadcrumbItem</code> Class<a class="headerlink" href="#modelbreadcrumbitem-class" title="Permanent link">&para;</a></h4>
12257
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="c1"># Basic model breadcrumb (uses plural verbose_name)</span>
12258
+ <a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="n">Device</span><span class="p">)</span>
12259
+ <a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a><span class="c1"># Will generate: (&quot;/dcim/devices/&quot;, &quot;Devices&quot;)</span>
12260
+ <a id="__codelineno-24-4" name="__codelineno-24-4" href="#__codelineno-24-4"></a>
12261
+ <a id="__codelineno-24-5" name="__codelineno-24-5" href="#__codelineno-24-5"></a><span class="c1"># Singular form</span>
12262
+ <a id="__codelineno-24-6" name="__codelineno-24-6" href="#__codelineno-24-6"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span>
12263
+ <a id="__codelineno-24-7" name="__codelineno-24-7" href="#__codelineno-24-7"></a> <span class="n">model</span><span class="o">=</span><span class="n">Device</span><span class="p">,</span>
12264
+ <a id="__codelineno-24-8" name="__codelineno-24-8" href="#__codelineno-24-8"></a> <span class="n">model_label_type</span><span class="o">=</span><span class="s2">&quot;singular&quot;</span><span class="p">,</span>
12265
+ <a id="__codelineno-24-9" name="__codelineno-24-9" href="#__codelineno-24-9"></a><span class="p">)</span>
12266
+ <a id="__codelineno-24-10" name="__codelineno-24-10" href="#__codelineno-24-10"></a><span class="c1"># Will generate: (&quot;/dcim/devices/&quot;, &quot;Device&quot;)</span>
12267
+ <a id="__codelineno-24-11" name="__codelineno-24-11" href="#__codelineno-24-11"></a>
12268
+ <a id="__codelineno-24-12" name="__codelineno-24-12" href="#__codelineno-24-12"></a><span class="c1"># Different URL action</span>
12269
+ <a id="__codelineno-24-13" name="__codelineno-24-13" href="#__codelineno-24-13"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span>
12270
+ <a id="__codelineno-24-14" name="__codelineno-24-14" href="#__codelineno-24-14"></a> <span class="n">model</span><span class="o">=</span><span class="n">Device</span><span class="p">,</span>
12271
+ <a id="__codelineno-24-15" name="__codelineno-24-15" href="#__codelineno-24-15"></a> <span class="n">model_url_action</span><span class="o">=</span><span class="s2">&quot;add&quot;</span><span class="p">,</span>
12272
+ <a id="__codelineno-24-16" name="__codelineno-24-16" href="#__codelineno-24-16"></a><span class="p">)</span>
12273
+ <a id="__codelineno-24-17" name="__codelineno-24-17" href="#__codelineno-24-17"></a><span class="c1"># Will generate: (&quot;/dcim/devices/add/&quot;, &quot;Devices&quot;)</span>
12274
+ <a id="__codelineno-24-18" name="__codelineno-24-18" href="#__codelineno-24-18"></a>
12275
+ <a id="__codelineno-24-19" name="__codelineno-24-19" href="#__codelineno-24-19"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ModelKeyBreadcrumbItem</span><span class="p">(</span>
12276
+ <a id="__codelineno-24-20" name="__codelineno-24-20" href="#__codelineno-24-20"></a> <span class="n">model_key</span><span class="o">=</span><span class="s2">&quot;parent_model&quot;</span><span class="p">,</span>
12277
+ <a id="__codelineno-24-21" name="__codelineno-24-21" href="#__codelineno-24-21"></a> <span class="n">model_label_type</span><span class="o">=</span><span class="s2">&quot;singular&quot;</span><span class="p">,</span>
12278
+ <a id="__codelineno-24-22" name="__codelineno-24-22" href="#__codelineno-24-22"></a><span class="p">)</span>
12279
+ <a id="__codelineno-24-23" name="__codelineno-24-23" href="#__codelineno-24-23"></a><span class="c1"># Will generate: (&quot;/dcim/devices/&quot;, &quot;Device&quot;) - assuming that &quot;parent model&quot; is Device</span>
12280
+ <a id="__codelineno-24-24" name="__codelineno-24-24" href="#__codelineno-24-24"></a>
12281
+ <a id="__codelineno-24-25" name="__codelineno-24-25" href="#__codelineno-24-25"></a><span class="c1"># Using dotted model path</span>
12282
+ <a id="__codelineno-24-26" name="__codelineno-24-26" href="#__codelineno-24-26"></a><span class="n">item</span> <span class="o">=</span> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="s2">&quot;dcim.device&quot;</span><span class="p">)</span>
12283
+ <a id="__codelineno-24-27" name="__codelineno-24-27" href="#__codelineno-24-27"></a><span class="c1"># Will generate: (&quot;/dcim/devices/&quot;, &quot;Devices&quot;)</span>
12284
+ </code></pre></div>
12285
+ <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ModelBreadcrumbItem">Code reference</a></p>
12286
+ <h4 id="instancebreadcrumbitem-class"><code>InstanceBreadcrumbItem</code> Class<a class="headerlink" href="#instancebreadcrumbitem-class" title="Permanent link">&para;</a></h4>
12287
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a><span class="c1"># Basic usage - looks for instance in context[&quot;object&quot;]</span>
12288
+ <a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a><span class="n">item</span> <span class="o">=</span> <span class="n">InstanceBreadcrumbItem</span><span class="p">()</span>
12289
+ <a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a><span class="c1"># Uses default instance_key=&quot;object&quot;</span>
12290
+ <a id="__codelineno-25-4" name="__codelineno-25-4" href="#__codelineno-25-4"></a>
12291
+ <a id="__codelineno-25-5" name="__codelineno-25-5" href="#__codelineno-25-5"></a><span class="c1"># Custom context key</span>
12292
+ <a id="__codelineno-25-6" name="__codelineno-25-6" href="#__codelineno-25-6"></a><span class="n">item</span> <span class="o">=</span> <span class="n">InstanceBreadcrumbItem</span><span class="p">(</span><span class="n">instance_key</span><span class="o">=</span><span class="s2">&quot;device&quot;</span><span class="p">)</span>
12293
+ <a id="__codelineno-25-7" name="__codelineno-25-7" href="#__codelineno-25-7"></a>
12294
+ <a id="__codelineno-25-8" name="__codelineno-25-8" href="#__codelineno-25-8"></a><span class="c1"># Custom label</span>
12295
+ <a id="__codelineno-25-9" name="__codelineno-25-9" href="#__codelineno-25-9"></a><span class="n">item</span> <span class="o">=</span> <span class="n">InstanceBreadcrumbItem</span><span class="p">(</span>
12296
+ <a id="__codelineno-25-10" name="__codelineno-25-10" href="#__codelineno-25-10"></a> <span class="n">instance_key</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">,</span>
12297
+ <a id="__codelineno-25-11" name="__codelineno-25-11" href="#__codelineno-25-11"></a> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Current Item&quot;</span>
12298
+ <a id="__codelineno-25-12" name="__codelineno-25-12" href="#__codelineno-25-12"></a><span class="p">)</span>
12299
+ <a id="__codelineno-25-13" name="__codelineno-25-13" href="#__codelineno-25-13"></a>
12300
+ <a id="__codelineno-25-14" name="__codelineno-25-14" href="#__codelineno-25-14"></a><span class="c1"># Dynamic label from context</span>
12301
+ <a id="__codelineno-25-15" name="__codelineno-25-15" href="#__codelineno-25-15"></a><span class="n">item</span> <span class="o">=</span> <span class="n">InstanceBreadcrumbItem</span><span class="p">(</span>
12302
+ <a id="__codelineno-25-16" name="__codelineno-25-16" href="#__codelineno-25-16"></a> <span class="n">label</span><span class="o">=</span><span class="k">lambda</span> <span class="n">ctx</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Editing </span><span class="si">{</span><span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;object&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
12303
+ <a id="__codelineno-25-17" name="__codelineno-25-17" href="#__codelineno-25-17"></a><span class="p">)</span>
12304
+ </code></pre></div>
12305
+ <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.InstanceBreadcrumbItem">Code reference</a></p>
12306
+ <h3 id="customizing-breadcrumbs">Customizing Breadcrumbs<a class="headerlink" href="#customizing-breadcrumbs" title="Permanent link">&para;</a></h3>
12307
+ <p>By default <code>Breadcrumbs</code> class uses two actions: <code>list</code> and <code>detail</code>. However, you can specify your custom action,
12308
+ or just pass to the items one built-in action to override default only for the chosen view actions.</p>
12309
+ <p>If there is no <code>view_action</code> in the context it will use <code>list</code> by default.</p>
12310
+ <p>If there is no <code>detail</code> in the context it will assume <code>detail=False</code> by default.</p>
12311
+ <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Breadcrumbs">Code reference</a></p>
12312
+ <h4 id="example-1-simple-override">Example 1: Simple Override<a class="headerlink" href="#example-1-simple-override" title="Permanent link">&para;</a></h4>
12313
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a><span class="c1"># Replace default breadcrumbs for create action</span>
12314
+ <a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a><span class="n">custom_breadcrumbs</span> <span class="o">=</span> <span class="n">Breadcrumbs</span><span class="p">(</span>
12315
+ <a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a> <span class="n">items</span><span class="o">=</span><span class="p">{</span>
12316
+ <a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a> <span class="s1">&#39;create&#39;</span><span class="p">:</span> <span class="p">[</span>
12317
+ <a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a> <span class="n">ViewNameBreadcrumbItem</span><span class="p">(</span><span class="n">view_name</span><span class="o">=</span><span class="s2">&quot;home&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Home&quot;</span><span class="p">),</span>
12318
+ <a id="__codelineno-26-6" name="__codelineno-26-6" href="#__codelineno-26-6"></a> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model_key</span><span class="o">=</span><span class="s2">&quot;model&quot;</span><span class="p">),</span>
12319
+ <a id="__codelineno-26-7" name="__codelineno-26-7" href="#__codelineno-26-7"></a> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model_key</span><span class="o">=</span><span class="s2">&quot;model&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Add New&quot;</span><span class="p">)</span>
12320
+ <a id="__codelineno-26-8" name="__codelineno-26-8" href="#__codelineno-26-8"></a> <span class="p">]</span>
12321
+ <a id="__codelineno-26-9" name="__codelineno-26-9" href="#__codelineno-26-9"></a> <span class="p">}</span>
12322
+ <a id="__codelineno-26-10" name="__codelineno-26-10" href="#__codelineno-26-10"></a><span class="p">)</span>
12323
+ </code></pre></div>
12324
+ <h4 id="example-2-complex-navigation">Example 2: Complex Navigation<a class="headerlink" href="#example-2-complex-navigation" title="Permanent link">&para;</a></h4>
12325
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a><span class="c1"># Multi-level hierarchy for nested objects</span>
12326
+ <a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a><span class="n">nested_breadcrumbs</span> <span class="o">=</span> <span class="n">Breadcrumbs</span><span class="p">(</span>
12327
+ <a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a> <span class="n">items</span><span class="o">=</span><span class="p">{</span>
12328
+ <a id="__codelineno-27-4" name="__codelineno-27-4" href="#__codelineno-27-4"></a> <span class="s1">&#39;retrieve&#39;</span><span class="p">:</span> <span class="p">[</span>
12329
+ <a id="__codelineno-27-5" name="__codelineno-27-5" href="#__codelineno-27-5"></a> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="s2">&quot;dcim.location&quot;</span><span class="p">,</span> <span class="n">model_label_type</span><span class="o">=</span><span class="s2">&quot;plural&quot;</span><span class="p">),</span>
12330
+ <a id="__codelineno-27-6" name="__codelineno-27-6" href="#__codelineno-27-6"></a> <span class="n">InstanceBreadcrumbItem</span><span class="p">(</span>
12331
+ <a id="__codelineno-27-7" name="__codelineno-27-7" href="#__codelineno-27-7"></a> <span class="n">instance_key</span><span class="o">=</span><span class="s2">&quot;object.location&quot;</span><span class="p">,</span>
12332
+ <a id="__codelineno-27-8" name="__codelineno-27-8" href="#__codelineno-27-8"></a> <span class="n">label</span><span class="o">=</span><span class="k">lambda</span> <span class="n">ctx</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Site: </span><span class="si">{</span><span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;object&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
12333
+ <a id="__codelineno-27-9" name="__codelineno-27-9" href="#__codelineno-27-9"></a> <span class="p">),</span>
12334
+ <a id="__codelineno-27-10" name="__codelineno-27-10" href="#__codelineno-27-10"></a> <span class="n">ModelBreadcrumbItem</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="s2">&quot;dcim.device&quot;</span><span class="p">,</span> <span class="n">model_label_type</span><span class="o">=</span><span class="s2">&quot;plural&quot;</span><span class="p">),</span>
12335
+ <a id="__codelineno-27-11" name="__codelineno-27-11" href="#__codelineno-27-11"></a> <span class="n">InstanceBreadcrumbItem</span><span class="p">(),</span>
12336
+ <a id="__codelineno-27-12" name="__codelineno-27-12" href="#__codelineno-27-12"></a> <span class="p">]</span>
12337
+ <a id="__codelineno-27-13" name="__codelineno-27-13" href="#__codelineno-27-13"></a> <span class="p">}</span>
12338
+ <a id="__codelineno-27-14" name="__codelineno-27-14" href="#__codelineno-27-14"></a><span class="p">)</span>
12339
+ </code></pre></div>
11905
12340
  <h2 id="complete-example">Complete Example<a class="headerlink" href="#complete-example" title="Permanent link">&para;</a></h2>
11906
- <div class="highlight"><span class="filename">views.py</span><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="p">(</span>
11907
- <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a> <span class="n">SectionChoices</span><span class="p">,</span>
11908
- <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> <span class="n">ObjectFieldsPanel</span><span class="p">,</span>
11909
- <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> <span class="n">ObjectDetailContent</span><span class="p">,</span>
11910
- <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> <span class="n">StatsPanel</span><span class="p">,</span>
11911
- <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="p">)</span>
11912
- <a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">views</span>
11913
- <a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a><span class="kn">from</span> <span class="nn">your_app.models</span> <span class="kn">import</span> <span class="n">Location</span><span class="p">,</span> <span class="n">Device</span><span class="p">,</span> <span class="n">Circuit</span>
11914
- <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a>
11915
- <a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a><span class="k">class</span> <span class="nc">LocationUIViewSet</span><span class="p">(</span><span class="n">views</span><span class="o">.</span><span class="n">NautobotUIViewSet</span><span class="p">):</span>
11916
- <a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a> <span class="n">queryset</span> <span class="o">=</span> <span class="n">Location</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
11917
- <a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a>
11918
- <a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
11919
- <a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span>
11920
- <a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a> <span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11921
- <a id="__codelineno-17-16" name="__codelineno-17-16" href="#__codelineno-17-16"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11922
- <a id="__codelineno-17-17" name="__codelineno-17-17" href="#__codelineno-17-17"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
11923
- <a id="__codelineno-17-18" name="__codelineno-17-18" href="#__codelineno-17-18"></a> <span class="n">fields</span><span class="o">=</span><span class="s2">&quot;__all__&quot;</span><span class="p">,</span>
11924
- <a id="__codelineno-17-19" name="__codelineno-17-19" href="#__codelineno-17-19"></a> <span class="p">),</span>
11925
- <a id="__codelineno-17-20" name="__codelineno-17-20" href="#__codelineno-17-20"></a> <span class="n">StatsPanel</span><span class="p">(</span>
11926
- <a id="__codelineno-17-21" name="__codelineno-17-21" href="#__codelineno-17-21"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
11927
- <a id="__codelineno-17-22" name="__codelineno-17-22" href="#__codelineno-17-22"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
11928
- <a id="__codelineno-17-23" name="__codelineno-17-23" href="#__codelineno-17-23"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
11929
- <a id="__codelineno-17-24" name="__codelineno-17-24" href="#__codelineno-17-24"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span>
11930
- <a id="__codelineno-17-25" name="__codelineno-17-25" href="#__codelineno-17-25"></a> <span class="n">Device</span><span class="p">,</span>
11931
- <a id="__codelineno-17-26" name="__codelineno-17-26" href="#__codelineno-17-26"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">)</span>
11932
- <a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> <span class="p">],</span>
11933
- <a id="__codelineno-17-28" name="__codelineno-17-28" href="#__codelineno-17-28"></a> <span class="p">),</span>
11934
- <a id="__codelineno-17-29" name="__codelineno-17-29" href="#__codelineno-17-29"></a> <span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
11935
- <a id="__codelineno-17-30" name="__codelineno-17-30" href="#__codelineno-17-30"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
11936
- <a id="__codelineno-17-31" name="__codelineno-17-31" href="#__codelineno-17-31"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11937
- <a id="__codelineno-17-32" name="__codelineno-17-32" href="#__codelineno-17-32"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;custom-fields&quot;</span><span class="p">,</span>
11938
- <a id="__codelineno-17-33" name="__codelineno-17-33" href="#__codelineno-17-33"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
11939
- <a id="__codelineno-17-34" name="__codelineno-17-34" href="#__codelineno-17-34"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span>
11940
- <a id="__codelineno-17-35" name="__codelineno-17-35" href="#__codelineno-17-35"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span>
11941
- <a id="__codelineno-17-36" name="__codelineno-17-36" href="#__codelineno-17-36"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
11942
- <a id="__codelineno-17-37" name="__codelineno-17-37" href="#__codelineno-17-37"></a> <span class="p">}</span>
11943
- <a id="__codelineno-17-38" name="__codelineno-17-38" href="#__codelineno-17-38"></a> <span class="p">},</span>
11944
- <a id="__codelineno-17-39" name="__codelineno-17-39" href="#__codelineno-17-39"></a> <span class="p">),</span>
11945
- <a id="__codelineno-17-40" name="__codelineno-17-40" href="#__codelineno-17-40"></a> <span class="n">ObjectTextPanel</span><span class="p">(</span>
11946
- <a id="__codelineno-17-41" name="__codelineno-17-41" href="#__codelineno-17-41"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
11947
- <a id="__codelineno-17-42" name="__codelineno-17-42" href="#__codelineno-17-42"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
11948
- <a id="__codelineno-17-43" name="__codelineno-17-43" href="#__codelineno-17-43"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
11949
- <a id="__codelineno-17-44" name="__codelineno-17-44" href="#__codelineno-17-44"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">BaseTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
11950
- <a id="__codelineno-17-45" name="__codelineno-17-45" href="#__codelineno-17-45"></a> <span class="p">),</span>
11951
- <a id="__codelineno-17-46" name="__codelineno-17-46" href="#__codelineno-17-46"></a> <span class="p">]</span>
11952
- <a id="__codelineno-17-47" name="__codelineno-17-47" href="#__codelineno-17-47"></a> <span class="p">)</span>
12341
+ <div class="highlight"><span class="filename">views.py</span><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a><span class="kn">from</span> <span class="nn">nautobot.apps.ui</span> <span class="kn">import</span> <span class="p">(</span>
12342
+ <a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a> <span class="n">SectionChoices</span><span class="p">,</span>
12343
+ <a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a> <span class="n">ObjectFieldsPanel</span><span class="p">,</span>
12344
+ <a id="__codelineno-28-4" name="__codelineno-28-4" href="#__codelineno-28-4"></a> <span class="n">ObjectDetailContent</span><span class="p">,</span>
12345
+ <a id="__codelineno-28-5" name="__codelineno-28-5" href="#__codelineno-28-5"></a> <span class="n">StatsPanel</span><span class="p">,</span>
12346
+ <a id="__codelineno-28-6" name="__codelineno-28-6" href="#__codelineno-28-6"></a><span class="p">)</span>
12347
+ <a id="__codelineno-28-7" name="__codelineno-28-7" href="#__codelineno-28-7"></a><span class="kn">from</span> <span class="nn">nautobot.apps</span> <span class="kn">import</span> <span class="n">views</span>
12348
+ <a id="__codelineno-28-8" name="__codelineno-28-8" href="#__codelineno-28-8"></a><span class="kn">from</span> <span class="nn">your_app.models</span> <span class="kn">import</span> <span class="n">Location</span><span class="p">,</span> <span class="n">Device</span><span class="p">,</span> <span class="n">Circuit</span>
12349
+ <a id="__codelineno-28-9" name="__codelineno-28-9" href="#__codelineno-28-9"></a>
12350
+ <a id="__codelineno-28-10" name="__codelineno-28-10" href="#__codelineno-28-10"></a><span class="k">class</span> <span class="nc">LocationUIViewSet</span><span class="p">(</span><span class="n">views</span><span class="o">.</span><span class="n">NautobotUIViewSet</span><span class="p">):</span>
12351
+ <a id="__codelineno-28-11" name="__codelineno-28-11" href="#__codelineno-28-11"></a> <span class="n">queryset</span> <span class="o">=</span> <span class="n">Location</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
12352
+ <a id="__codelineno-28-12" name="__codelineno-28-12" href="#__codelineno-28-12"></a>
12353
+ <a id="__codelineno-28-13" name="__codelineno-28-13" href="#__codelineno-28-13"></a> <span class="n">object_detail_content</span> <span class="o">=</span> <span class="n">ObjectDetailContent</span><span class="p">(</span>
12354
+ <a id="__codelineno-28-14" name="__codelineno-28-14" href="#__codelineno-28-14"></a> <span class="n">panels</span><span class="o">=</span><span class="p">[</span>
12355
+ <a id="__codelineno-28-15" name="__codelineno-28-15" href="#__codelineno-28-15"></a> <span class="n">ObjectFieldsPanel</span><span class="p">(</span>
12356
+ <a id="__codelineno-28-16" name="__codelineno-28-16" href="#__codelineno-28-16"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
12357
+ <a id="__codelineno-28-17" name="__codelineno-28-17" href="#__codelineno-28-17"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">LEFT_HALF</span><span class="p">,</span>
12358
+ <a id="__codelineno-28-18" name="__codelineno-28-18" href="#__codelineno-28-18"></a> <span class="n">fields</span><span class="o">=</span><span class="s2">&quot;__all__&quot;</span><span class="p">,</span>
12359
+ <a id="__codelineno-28-19" name="__codelineno-28-19" href="#__codelineno-28-19"></a> <span class="p">),</span>
12360
+ <a id="__codelineno-28-20" name="__codelineno-28-20" href="#__codelineno-28-20"></a> <span class="n">StatsPanel</span><span class="p">(</span>
12361
+ <a id="__codelineno-28-21" name="__codelineno-28-21" href="#__codelineno-28-21"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
12362
+ <a id="__codelineno-28-22" name="__codelineno-28-22" href="#__codelineno-28-22"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">RIGHT_HALF</span><span class="p">,</span>
12363
+ <a id="__codelineno-28-23" name="__codelineno-28-23" href="#__codelineno-28-23"></a> <span class="n">filter_name</span><span class="o">=</span><span class="s2">&quot;location&quot;</span><span class="p">,</span>
12364
+ <a id="__codelineno-28-24" name="__codelineno-28-24" href="#__codelineno-28-24"></a> <span class="n">related_models</span><span class="o">=</span><span class="p">[</span>
12365
+ <a id="__codelineno-28-25" name="__codelineno-28-25" href="#__codelineno-28-25"></a> <span class="n">Device</span><span class="p">,</span>
12366
+ <a id="__codelineno-28-26" name="__codelineno-28-26" href="#__codelineno-28-26"></a> <span class="p">(</span><span class="n">Circuit</span><span class="p">,</span> <span class="s2">&quot;circuit_terminations__location__in&quot;</span><span class="p">)</span>
12367
+ <a id="__codelineno-28-27" name="__codelineno-28-27" href="#__codelineno-28-27"></a> <span class="p">],</span>
12368
+ <a id="__codelineno-28-28" name="__codelineno-28-28" href="#__codelineno-28-28"></a> <span class="p">),</span>
12369
+ <a id="__codelineno-28-29" name="__codelineno-28-29" href="#__codelineno-28-29"></a> <span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
12370
+ <a id="__codelineno-28-30" name="__codelineno-28-30" href="#__codelineno-28-30"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
12371
+ <a id="__codelineno-28-31" name="__codelineno-28-31" href="#__codelineno-28-31"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
12372
+ <a id="__codelineno-28-32" name="__codelineno-28-32" href="#__codelineno-28-32"></a> <span class="n">body_id</span><span class="o">=</span><span class="s2">&quot;custom-fields&quot;</span><span class="p">,</span>
12373
+ <a id="__codelineno-28-33" name="__codelineno-28-33" href="#__codelineno-28-33"></a> <span class="n">data</span><span class="o">=</span><span class="p">{</span>
12374
+ <a id="__codelineno-28-34" name="__codelineno-28-34" href="#__codelineno-28-34"></a> <span class="s2">&quot;Network&quot;</span><span class="p">:</span> <span class="p">{</span>
12375
+ <a id="__codelineno-28-35" name="__codelineno-28-35" href="#__codelineno-28-35"></a> <span class="s2">&quot;VLAN&quot;</span><span class="p">:</span> <span class="s2">&quot;100&quot;</span><span class="p">,</span>
12376
+ <a id="__codelineno-28-36" name="__codelineno-28-36" href="#__codelineno-28-36"></a> <span class="s2">&quot;IP Range&quot;</span><span class="p">:</span> <span class="s2">&quot;192.168.1.0/24&quot;</span>
12377
+ <a id="__codelineno-28-37" name="__codelineno-28-37" href="#__codelineno-28-37"></a> <span class="p">}</span>
12378
+ <a id="__codelineno-28-38" name="__codelineno-28-38" href="#__codelineno-28-38"></a> <span class="p">},</span>
12379
+ <a id="__codelineno-28-39" name="__codelineno-28-39" href="#__codelineno-28-39"></a> <span class="p">),</span>
12380
+ <a id="__codelineno-28-40" name="__codelineno-28-40" href="#__codelineno-28-40"></a> <span class="n">ObjectTextPanel</span><span class="p">(</span>
12381
+ <a id="__codelineno-28-41" name="__codelineno-28-41" href="#__codelineno-28-41"></a> <span class="n">weight</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
12382
+ <a id="__codelineno-28-42" name="__codelineno-28-42" href="#__codelineno-28-42"></a> <span class="n">section</span><span class="o">=</span><span class="n">SectionChoices</span><span class="o">.</span><span class="n">FULL_WIDTH</span><span class="p">,</span>
12383
+ <a id="__codelineno-28-43" name="__codelineno-28-43" href="#__codelineno-28-43"></a> <span class="n">object_field</span><span class="o">=</span><span class="s2">&quot;description&quot;</span><span class="p">,</span>
12384
+ <a id="__codelineno-28-44" name="__codelineno-28-44" href="#__codelineno-28-44"></a> <span class="n">render_as</span><span class="o">=</span><span class="n">BaseTextPanel</span><span class="o">.</span><span class="n">RenderOptions</span><span class="o">.</span><span class="n">MARKDOWN</span><span class="p">,</span>
12385
+ <a id="__codelineno-28-45" name="__codelineno-28-45" href="#__codelineno-28-45"></a> <span class="p">),</span>
12386
+ <a id="__codelineno-28-46" name="__codelineno-28-46" href="#__codelineno-28-46"></a> <span class="p">]</span>
12387
+ <a id="__codelineno-28-47" name="__codelineno-28-47" href="#__codelineno-28-47"></a> <span class="p">)</span>
11953
12388
  </code></pre></div>
11954
12389
  <h2 id="layouts-and-sections">Layouts and Sections<a class="headerlink" href="#layouts-and-sections" title="Permanent link">&para;</a></h2>
11955
12390
  <h3 id="render-options"><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.BaseTextPanel.RenderOptions">Render Options</a><a class="headerlink" href="#render-options" title="Permanent link">&para;</a></h3>
@@ -12110,7 +12545,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
12110
12545
 
12111
12546
 
12112
12547
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
12113
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 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 2024 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>
12548
+ <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>
12114
12549
  </a>
12115
12550
 
12116
12551
 
@@ -12118,7 +12553,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
12118
12553
 
12119
12554
 
12120
12555
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
12121
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
12556
+ <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>
12122
12557
  </a>
12123
12558
 
12124
12559
 
@@ -12126,7 +12561,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
12126
12561
 
12127
12562
 
12128
12563
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
12129
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
12564
+ <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>
12130
12565
  </a>
12131
12566
 
12132
12567
 
@@ -12134,7 +12569,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
12134
12569
 
12135
12570
 
12136
12571
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
12137
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M165.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.9M244.8 8C106.1 8 0 113.3 0 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.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.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>
12572
+ <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>
12138
12573
  </a>
12139
12574
 
12140
12575
 
@@ -12142,7 +12577,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
12142
12577
 
12143
12578
 
12144
12579
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
12145
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
12580
+ <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>
12146
12581
  </a>
12147
12582
 
12148
12583
  </div>
@@ -12162,7 +12597,7 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
12162
12597
  <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.d50fe291.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>
12163
12598
 
12164
12599
 
12165
- <script src="../../assets/javascripts/bundle.56ea9cef.min.js"></script>
12600
+ <script src="../../assets/javascripts/bundle.50899def.min.js"></script>
12166
12601
 
12167
12602
 
12168
12603
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});