nautobot 2.4.14__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 (433) 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/management/commands/check_job_approval_status.py +47 -0
  7. nautobot/core/management/commands/generate_test_data.py +1 -1
  8. nautobot/core/management/commands/migrate.py +1 -1
  9. nautobot/core/models/tree_queries.py +17 -0
  10. nautobot/core/settings.py +2 -2
  11. nautobot/core/tables.py +25 -2
  12. nautobot/core/templates/base_django.html +1 -1
  13. nautobot/core/templates/components/panel/header_extra_content_table.html +1 -1
  14. nautobot/core/templates/generic/object_list.html +17 -20
  15. nautobot/core/templates/inc/breadcrumbs.html +14 -0
  16. nautobot/core/templatetags/buttons.py +2 -4
  17. nautobot/core/templatetags/helpers.py +29 -6
  18. nautobot/core/templatetags/ui_framework.py +21 -0
  19. nautobot/core/testing/filters.py +20 -3
  20. nautobot/core/testing/forms.py +1 -1
  21. nautobot/core/tests/integration/test_filters.py +2 -2
  22. nautobot/core/tests/test_breadcrumbs.py +366 -0
  23. nautobot/core/tests/test_commands.py +40 -0
  24. nautobot/core/tests/test_filters.py +51 -1
  25. nautobot/core/tests/test_forms.py +1 -1
  26. nautobot/core/tests/test_graphql.py +4 -4
  27. nautobot/core/tests/test_titles.py +183 -0
  28. nautobot/core/tests/test_tree_queries.py +30 -0
  29. nautobot/core/tests/test_views.py +2 -2
  30. nautobot/core/tests/test_views_utils.py +1 -1
  31. nautobot/core/ui/breadcrumbs.py +538 -0
  32. nautobot/core/ui/bulk_buttons.py +53 -0
  33. nautobot/core/ui/object_detail.py +31 -8
  34. nautobot/core/ui/titles.py +127 -0
  35. nautobot/core/ui/utils.py +25 -0
  36. nautobot/core/utils/migrations.py +1 -1
  37. nautobot/core/views/__init__.py +1 -1
  38. nautobot/core/views/mixins.py +26 -1
  39. nautobot/core/views/renderers.py +20 -2
  40. nautobot/core/views/utils.py +13 -12
  41. nautobot/dcim/api/serializers.py +9 -0
  42. nautobot/dcim/choices.py +53 -0
  43. nautobot/dcim/filters/__init__.py +15 -3
  44. nautobot/dcim/forms.py +120 -7
  45. nautobot/dcim/management/commands/trace_paths.py +1 -1
  46. nautobot/dcim/migrations/0072_alter_powerfeed_options_and_more.py +97 -0
  47. nautobot/dcim/models/device_component_templates.py +8 -0
  48. nautobot/dcim/models/device_components.py +31 -12
  49. nautobot/dcim/models/devices.py +1 -1
  50. nautobot/dcim/models/power.py +171 -10
  51. nautobot/dcim/models/racks.py +7 -4
  52. nautobot/dcim/tables/devices.py +2 -0
  53. nautobot/dcim/tables/devicetypes.py +1 -0
  54. nautobot/dcim/tables/power.py +30 -2
  55. nautobot/dcim/templates/dcim/device.html +2 -2
  56. nautobot/dcim/templates/dcim/devicetype_retrieve.html +1 -214
  57. nautobot/dcim/templates/dcim/location_retrieve.html +2 -2
  58. nautobot/dcim/templates/dcim/powerfeed_edit.html +8 -0
  59. nautobot/dcim/templates/dcim/powerfeed_retrieve.html +1 -1
  60. nautobot/dcim/tests/integration/test_device_bulk_operations.py +61 -0
  61. nautobot/dcim/tests/test_api.py +24 -4
  62. nautobot/dcim/tests/test_filters.py +91 -13
  63. nautobot/dcim/tests/test_models.py +262 -0
  64. nautobot/dcim/tests/test_views.py +20 -12
  65. nautobot/dcim/utils.py +9 -0
  66. nautobot/dcim/views.py +390 -77
  67. nautobot/extras/factory.py +19 -20
  68. nautobot/extras/filters/__init__.py +3 -2
  69. nautobot/extras/filters/mixins.py +15 -1
  70. nautobot/extras/forms/__init__.py +2 -1
  71. nautobot/extras/forms/forms.py +62 -0
  72. nautobot/extras/managers.py +4 -1
  73. nautobot/extras/migrations/0125_jobresult_date_started.py +18 -0
  74. nautobot/extras/models/customfields.py +1 -2
  75. nautobot/extras/models/datasources.py +1 -2
  76. nautobot/extras/models/jobs.py +7 -3
  77. nautobot/extras/plugins/views.py +24 -1
  78. nautobot/extras/secrets/__init__.py +1 -1
  79. nautobot/extras/tables.py +9 -0
  80. nautobot/extras/templates/extras/customfield.html +2 -129
  81. nautobot/extras/templates/extras/customfield_edit.html +2 -108
  82. nautobot/extras/templates/extras/customfield_retrieve.html +129 -0
  83. nautobot/extras/templates/extras/customfield_update.html +108 -0
  84. nautobot/extras/templates/extras/inc/jobresult.html +7 -3
  85. nautobot/extras/templates/extras/jobresult.html +2 -155
  86. nautobot/extras/templates/extras/jobresult_retrieve.html +155 -0
  87. nautobot/extras/templates/extras/marketplace.html +5 -6
  88. nautobot/extras/templates/extras/note.html +2 -53
  89. nautobot/extras/templates/extras/note_retrieve.html +53 -0
  90. nautobot/extras/templates/extras/plugins_list.html +5 -6
  91. nautobot/extras/templatetags/custom_links.py +2 -2
  92. nautobot/extras/templatetags/job_buttons.py +1 -1
  93. nautobot/extras/templatetags/plugins.py +1 -1
  94. nautobot/extras/tests/integration/test_computedfields.py +2 -2
  95. nautobot/extras/tests/integration/test_customfields.py +14 -11
  96. nautobot/extras/tests/integration/test_dynamicgroups.py +1 -1
  97. nautobot/extras/tests/integration/test_notes.py +1 -1
  98. nautobot/extras/tests/integration/test_plugins.py +6 -6
  99. nautobot/extras/tests/integration/test_relationships.py +2 -2
  100. nautobot/extras/tests/test_filters.py +9 -0
  101. nautobot/extras/tests/test_forms.py +2 -2
  102. nautobot/extras/tests/test_plugins.py +2 -3
  103. nautobot/extras/tests/test_relationships.py +7 -7
  104. nautobot/extras/tests/test_views.py +172 -1
  105. nautobot/extras/urls.py +3 -59
  106. nautobot/extras/utils.py +1 -1
  107. nautobot/extras/views.py +77 -178
  108. nautobot/ipam/tables.py +8 -15
  109. nautobot/ipam/tests/migration/test_migrations.py +8 -8
  110. nautobot/ipam/tests/test_api.py +2 -2
  111. nautobot/ipam/tests/test_models.py +1 -1
  112. nautobot/project-static/docs/404.html +23 -0
  113. nautobot/project-static/docs/apps/index.html +23 -0
  114. nautobot/project-static/docs/apps/nautobot-apps.html +23 -0
  115. nautobot/project-static/docs/assets/_mkdocstrings.css +44 -6
  116. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +28 -0
  117. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +25 -0
  118. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +128 -20
  119. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +37 -4
  120. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +39 -6
  121. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +25 -0
  122. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +24 -0
  123. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +32 -5
  124. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +41 -8
  125. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +39 -7
  126. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +43 -10
  127. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +74 -59
  128. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +143 -28
  129. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +43 -12
  130. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +135 -53
  131. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +229 -36
  132. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +27 -1
  133. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +30 -1
  134. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +162 -18
  135. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +258 -51
  136. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +5987 -2620
  137. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +25 -0
  138. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +154 -55
  139. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +150 -35
  140. nautobot/project-static/docs/development/apps/api/configuration-view.html +23 -0
  141. nautobot/project-static/docs/development/apps/api/database-backend-config.html +23 -0
  142. nautobot/project-static/docs/development/apps/api/models/django-admin.html +23 -0
  143. nautobot/project-static/docs/development/apps/api/models/global-search.html +23 -0
  144. nautobot/project-static/docs/development/apps/api/models/graphql.html +23 -0
  145. nautobot/project-static/docs/development/apps/api/models/index.html +23 -0
  146. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +23 -0
  147. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +23 -0
  148. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +23 -0
  149. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +23 -0
  150. nautobot/project-static/docs/development/apps/api/platform-features/index.html +23 -0
  151. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +23 -0
  152. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +23 -0
  153. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +23 -0
  154. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +23 -0
  155. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +23 -0
  156. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +23 -0
  157. nautobot/project-static/docs/development/apps/api/prometheus.html +23 -0
  158. nautobot/project-static/docs/development/apps/api/setup.html +23 -0
  159. nautobot/project-static/docs/development/apps/api/testing.html +23 -0
  160. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +23 -0
  161. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +23 -0
  162. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +23 -0
  163. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +23 -0
  164. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +23 -0
  165. nautobot/project-static/docs/development/apps/api/views/base-template.html +23 -0
  166. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +23 -0
  167. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +23 -0
  168. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +23 -0
  169. nautobot/project-static/docs/development/apps/api/views/index.html +23 -0
  170. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +23 -0
  171. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +31 -2
  172. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +23 -0
  173. nautobot/project-static/docs/development/apps/api/views/notes.html +23 -0
  174. nautobot/project-static/docs/development/apps/api/views/rest-api.html +23 -0
  175. nautobot/project-static/docs/development/apps/api/views/urls.html +23 -0
  176. nautobot/project-static/docs/development/apps/index.html +23 -0
  177. nautobot/project-static/docs/development/apps/migration/code-updates.html +23 -0
  178. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +23 -0
  179. nautobot/project-static/docs/development/apps/migration/from-v1.html +23 -0
  180. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +23 -0
  181. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +23 -0
  182. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +23 -0
  183. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +23 -0
  184. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +26 -3
  185. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +10544 -0
  186. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +23 -0
  187. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +23 -0
  188. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +23 -0
  189. nautobot/project-static/docs/development/apps/porting-from-netbox.html +26 -3
  190. nautobot/project-static/docs/development/core/application-registry.html +23 -0
  191. nautobot/project-static/docs/development/core/best-practices.html +23 -0
  192. nautobot/project-static/docs/development/core/bootstrap-ui.html +23 -0
  193. nautobot/project-static/docs/development/core/caching.html +23 -0
  194. nautobot/project-static/docs/development/core/controllers.html +23 -0
  195. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +23 -0
  196. nautobot/project-static/docs/development/core/generic-views.html +23 -0
  197. nautobot/project-static/docs/development/core/getting-started.html +23 -0
  198. nautobot/project-static/docs/development/core/homepage.html +23 -0
  199. nautobot/project-static/docs/development/core/index.html +23 -0
  200. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +23 -0
  201. nautobot/project-static/docs/development/core/model-checklist.html +23 -0
  202. nautobot/project-static/docs/development/core/model-features.html +23 -0
  203. nautobot/project-static/docs/development/core/natural-keys.html +23 -0
  204. nautobot/project-static/docs/development/core/navigation-menu.html +23 -0
  205. nautobot/project-static/docs/development/core/release-checklist.html +23 -0
  206. nautobot/project-static/docs/development/core/role-internals.html +23 -0
  207. nautobot/project-static/docs/development/core/settings.html +23 -0
  208. nautobot/project-static/docs/development/core/style-guide.html +23 -0
  209. nautobot/project-static/docs/development/core/templates.html +23 -0
  210. nautobot/project-static/docs/development/core/testing.html +23 -0
  211. nautobot/project-static/docs/development/core/ui-component-framework.html +713 -255
  212. nautobot/project-static/docs/development/core/user-preferences.html +23 -0
  213. nautobot/project-static/docs/development/index.html +23 -0
  214. nautobot/project-static/docs/development/jobs/getting-started.html +23 -0
  215. nautobot/project-static/docs/development/jobs/index.html +23 -0
  216. nautobot/project-static/docs/development/jobs/installation.html +23 -0
  217. nautobot/project-static/docs/development/jobs/job-extensions.html +23 -0
  218. nautobot/project-static/docs/development/jobs/job-logging.html +23 -0
  219. nautobot/project-static/docs/development/jobs/job-patterns.html +23 -0
  220. nautobot/project-static/docs/development/jobs/job-structure.html +23 -0
  221. nautobot/project-static/docs/development/jobs/migration/from-v1.html +23 -0
  222. nautobot/project-static/docs/development/jobs/testing.html +23 -0
  223. nautobot/project-static/docs/index.html +23 -0
  224. nautobot/project-static/docs/media/development/core/ui-component-framework/breadcrumbs-titles-data-flow.png +0 -0
  225. nautobot/project-static/docs/media/power_distribution.png +0 -0
  226. nautobot/project-static/docs/objects.inv +0 -0
  227. nautobot/project-static/docs/overview/application_stack.html +23 -0
  228. nautobot/project-static/docs/overview/design_philosophy.html +23 -0
  229. nautobot/project-static/docs/release-notes/index.html +23 -0
  230. nautobot/project-static/docs/release-notes/version-1.0.html +23 -0
  231. nautobot/project-static/docs/release-notes/version-1.1.html +23 -0
  232. nautobot/project-static/docs/release-notes/version-1.2.html +23 -0
  233. nautobot/project-static/docs/release-notes/version-1.3.html +23 -0
  234. nautobot/project-static/docs/release-notes/version-1.4.html +23 -0
  235. nautobot/project-static/docs/release-notes/version-1.5.html +23 -0
  236. nautobot/project-static/docs/release-notes/version-1.6.html +23 -0
  237. nautobot/project-static/docs/release-notes/version-2.0.html +23 -0
  238. nautobot/project-static/docs/release-notes/version-2.1.html +23 -0
  239. nautobot/project-static/docs/release-notes/version-2.2.html +23 -0
  240. nautobot/project-static/docs/release-notes/version-2.3.html +23 -0
  241. nautobot/project-static/docs/release-notes/version-2.4.html +231 -0
  242. nautobot/project-static/docs/requirements.txt +2 -2
  243. nautobot/project-static/docs/search/search_index.json +1 -1
  244. nautobot/project-static/docs/sitemap.xml +303 -299
  245. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  246. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +23 -0
  247. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +23 -0
  248. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +23 -0
  249. nautobot/project-static/docs/user-guide/administration/configuration/index.html +23 -0
  250. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +23 -0
  251. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +23 -0
  252. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +23 -0
  253. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +23 -0
  254. nautobot/project-static/docs/user-guide/administration/guides/docker.html +23 -0
  255. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +23 -0
  256. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +23 -0
  257. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +23 -0
  258. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +23 -0
  259. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +23 -0
  260. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +23 -0
  261. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +23 -0
  262. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +23 -0
  263. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +23 -0
  264. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +23 -0
  265. nautobot/project-static/docs/user-guide/administration/installation/index.html +23 -0
  266. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +23 -0
  267. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +23 -0
  268. nautobot/project-static/docs/user-guide/administration/installation/services.html +23 -0
  269. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +23 -0
  270. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +23 -0
  271. nautobot/project-static/docs/user-guide/administration/security/index.html +23 -0
  272. nautobot/project-static/docs/user-guide/administration/security/notices.html +23 -0
  273. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +284 -219
  274. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +23 -0
  275. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +23 -0
  276. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +23 -0
  277. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +23 -0
  278. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +23 -0
  279. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +23 -0
  280. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +23 -0
  281. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +23 -0
  282. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +23 -0
  283. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +23 -0
  284. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +23 -0
  285. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +23 -0
  286. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +23 -0
  287. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +23 -0
  288. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +23 -0
  289. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +23 -0
  290. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +23 -0
  291. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +23 -0
  292. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +23 -0
  293. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +23 -0
  294. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +23 -0
  295. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +23 -0
  296. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +23 -0
  297. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +23 -0
  298. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +23 -0
  299. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +23 -0
  300. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +23 -0
  301. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +23 -0
  302. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +23 -0
  303. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +23 -0
  304. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +23 -0
  305. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +23 -0
  306. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +23 -0
  307. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +23 -0
  308. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +23 -0
  309. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +23 -0
  310. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +23 -0
  311. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +23 -0
  312. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +23 -0
  313. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +23 -0
  314. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +23 -0
  315. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +23 -0
  316. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +23 -0
  317. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +23 -0
  318. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +23 -0
  319. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +23 -0
  320. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +23 -0
  321. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +23 -0
  322. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +23 -0
  323. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +23 -0
  324. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +305 -5
  325. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +24 -1
  326. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +23 -0
  327. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +136 -3
  328. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +41 -1
  329. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +40 -0
  330. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +23 -0
  331. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +23 -0
  332. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +23 -0
  333. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +23 -0
  334. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +23 -0
  335. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +23 -0
  336. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +23 -0
  337. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +23 -0
  338. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +23 -0
  339. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +23 -0
  340. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +23 -0
  341. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +23 -0
  342. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +23 -0
  343. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +23 -0
  344. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +23 -0
  345. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +23 -0
  346. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +23 -0
  347. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +23 -0
  348. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +23 -0
  349. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +23 -0
  350. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +23 -0
  351. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +23 -0
  352. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +23 -0
  353. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +23 -0
  354. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +23 -0
  355. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +23 -0
  356. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +23 -0
  357. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +23 -0
  358. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +23 -0
  359. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +23 -0
  360. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +23 -0
  361. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +23 -0
  362. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +23 -0
  363. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +23 -0
  364. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +23 -0
  365. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +23 -0
  366. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +23 -0
  367. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +23 -0
  368. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +23 -0
  369. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +23 -0
  370. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +23 -0
  371. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +23 -0
  372. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +23 -0
  373. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +23 -0
  374. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +23 -0
  375. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +23 -0
  376. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +23 -0
  377. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +23 -0
  378. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +23 -0
  379. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +23 -0
  380. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +23 -0
  381. nautobot/project-static/docs/user-guide/index.html +23 -0
  382. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +23 -0
  383. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +23 -0
  384. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +23 -0
  385. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +23 -0
  386. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +23 -0
  387. nautobot/project-static/docs/user-guide/platform-functionality/events.html +23 -0
  388. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +23 -0
  389. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +23 -0
  390. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +23 -0
  391. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +23 -0
  392. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +23 -0
  393. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +23 -0
  394. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +23 -0
  395. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +24 -1
  396. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +23 -0
  397. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +23 -0
  398. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +23 -0
  399. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +23 -0
  400. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +23 -0
  401. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +23 -0
  402. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +23 -0
  403. nautobot/project-static/docs/user-guide/platform-functionality/note.html +23 -0
  404. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +23 -0
  405. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +23 -0
  406. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +23 -0
  407. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +23 -0
  408. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +23 -0
  409. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +23 -0
  410. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +23 -0
  411. nautobot/project-static/docs/user-guide/platform-functionality/role.html +23 -0
  412. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +23 -0
  413. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +23 -0
  414. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +23 -0
  415. nautobot/project-static/docs/user-guide/platform-functionality/status.html +23 -0
  416. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +23 -0
  417. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +23 -0
  418. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +23 -0
  419. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +23 -0
  420. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +23 -0
  421. nautobot/users/tests/test_api.py +2 -2
  422. nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -252
  423. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -75
  424. nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +252 -0
  425. nautobot/virtualization/templates/virtualization/virtualmachine_update.html +75 -0
  426. nautobot/virtualization/urls.py +3 -61
  427. nautobot/virtualization/views.py +48 -72
  428. {nautobot-2.4.14.dist-info → nautobot-2.4.15.dist-info}/METADATA +24 -24
  429. {nautobot-2.4.14.dist-info → nautobot-2.4.15.dist-info}/RECORD +433 -416
  430. {nautobot-2.4.14.dist-info → nautobot-2.4.15.dist-info}/LICENSE.txt +0 -0
  431. {nautobot-2.4.14.dist-info → nautobot-2.4.15.dist-info}/NOTICE +0 -0
  432. {nautobot-2.4.14.dist-info → nautobot-2.4.15.dist-info}/WHEEL +0 -0
  433. {nautobot-2.4.14.dist-info → nautobot-2.4.15.dist-info}/entry_points.txt +0 -0
@@ -8673,6 +8673,29 @@
8673
8673
 
8674
8674
 
8675
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
+
8676
8699
  </ul>
8677
8700
  </nav>
8678
8701
 
@@ -9451,11 +9474,29 @@
9451
9474
  </ul>
9452
9475
  </nav>
9453
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
+
9454
9486
  </li>
9455
9487
 
9456
9488
  </ul>
9457
9489
  </nav>
9458
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
+
9459
9500
  </li>
9460
9501
 
9461
9502
  <li class="md-nav__item">
@@ -9810,6 +9851,96 @@
9810
9851
  </ul>
9811
9852
  </nav>
9812
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
+
9813
9944
  </li>
9814
9945
 
9815
9946
  <li class="md-nav__item">
@@ -10805,11 +10936,29 @@
10805
10936
  </ul>
10806
10937
  </nav>
10807
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
+
10808
10948
  </li>
10809
10949
 
10810
10950
  </ul>
10811
10951
  </nav>
10812
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
+
10813
10962
  </li>
10814
10963
 
10815
10964
  <li class="md-nav__item">
@@ -11164,6 +11313,96 @@
11164
11313
  </ul>
11165
11314
  </nav>
11166
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
+
11167
11406
  </li>
11168
11407
 
11169
11408
  <li class="md-nav__item">
@@ -11394,31 +11633,110 @@
11394
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>
11395
11634
  </ul>
11396
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>
11397
11715
  <h2 id="panel-types">Panel Types<a class="headerlink" href="#panel-types" title="Permanent link">&para;</a></h2>
11398
11716
  <h3 id="base-panel">Base Panel<a class="headerlink" href="#base-panel" title="Permanent link">&para;</a></h3>
11399
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>
11400
11718
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Panel">Code reference</a></p>
11401
11719
  <h4 id="panel-examples">Panel Examples<a class="headerlink" href="#panel-examples" title="Permanent link">&para;</a></h4>
11402
- <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>
11403
- <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>
11404
- <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="n">Panel</span><span class="p">(</span>
11405
- <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>
11406
- <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>
11407
- <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>
11408
- <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>
11409
11727
  </code></pre></div>
11410
- <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>
11411
- <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>
11412
- <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="n">Panel</span><span class="p">(</span>
11413
- <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>
11414
- <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>
11415
- <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>
11416
- <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>
11417
- <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>
11418
- <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>
11419
- <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>
11420
- <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>
11421
- <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>
11422
11740
  </code></pre></div>
11423
11741
  <h3 id="objectfieldspanel">ObjectFieldsPanel<a class="headerlink" href="#objectfieldspanel" title="Permanent link">&para;</a></h3>
11424
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>
@@ -11431,31 +11749,31 @@
11431
11749
  - `comments`, `tags` (these are automatically added as standalone panels)
11432
11750
  </code></pre></div>
11433
11751
  <h4 id="objectfieldspanel-examples">ObjectFieldsPanel Examples<a class="headerlink" href="#objectfieldspanel-examples" title="Permanent link">&para;</a></h4>
11434
- <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>
11435
- <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>
11436
- <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11437
- <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>
11438
- <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>
11439
- <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>
11440
- <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>
11441
- <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>
11442
11760
  </code></pre></div>
11443
- <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>
11444
- <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>
11445
- <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
11446
- <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>
11447
- <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>
11448
- <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>
11449
- <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>
11450
- <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>
11451
- <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>
11452
- <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>
11453
- <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>
11454
- <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>
11455
- <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>
11456
- <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>
11457
- <a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a> <span class="p">},</span>
11458
- <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>
11459
11777
  </code></pre></div>
11460
11778
  <!-- pyml disable-num-lines 5 no-inline-html -->
11461
11779
  <div class="grid cards example-images">
@@ -11472,63 +11790,63 @@
11472
11790
  </div>
11473
11791
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.KeyValueTablePanel">Code reference</a></p>
11474
11792
  <h4 id="keyvaluetablepanel-examples">KeyValueTablePanel Examples<a class="headerlink" href="#keyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
11475
- <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>
11476
- <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>
11477
- <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
11478
- <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>
11479
- <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>
11480
- <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>
11481
- <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>
11482
- <a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a> <span class="p">},</span>
11483
- <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>
11484
11802
  </code></pre></div>
11485
- <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>
11486
- <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
11487
- <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">KeyValueTablePanel</span><span class="p">(</span>
11488
- <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>
11489
- <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>
11490
- <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>
11491
- <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>
11492
- <a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a> <span class="p">},</span>
11493
- <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>
11494
- <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>
11495
- <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>
11496
- <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>
11497
- <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>
11498
- <a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a> <span class="p">],</span>
11499
- <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>
11500
- <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>
11501
- <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>
11502
- <a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a> <span class="p">]</span>
11503
- <a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a> <span class="p">},</span>
11504
- <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>
11505
11823
  </code></pre></div>
11506
11824
  <h3 id="groupedkeyvaluetablepanel">GroupedKeyValueTablePanel<a class="headerlink" href="#groupedkeyvaluetablepanel" title="Permanent link">&para;</a></h3>
11507
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>
11508
11826
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.GroupedKeyValueTablePanel">Code reference</a></p>
11509
11827
  <h4 id="groupedkeyvaluetablepanel-examples">GroupedKeyValueTablePanel Examples<a class="headerlink" href="#groupedkeyvaluetablepanel-examples" title="Permanent link">&para;</a></h4>
11510
- <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>
11511
- <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
11512
- <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
11513
- <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>
11514
- <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>
11515
- <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>
11516
- <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>
11517
- <a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a> <span class="c1"># Data Structure</span>
11518
- <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>
11519
- <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>
11520
- <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>
11521
- <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>
11522
- <a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a> <span class="p">},</span>
11523
- <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>
11524
- <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>
11525
- <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>
11526
- <a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a> <span class="p">},</span>
11527
- <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>
11528
- <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>
11529
- <a id="__codelineno-8-20" name="__codelineno-8-20" href="#__codelineno-8-20"></a> <span class="p">}</span>
11530
- <a id="__codelineno-8-21" name="__codelineno-8-21" href="#__codelineno-8-21"></a> <span class="p">},</span>
11531
- <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>
11532
11850
  </code></pre></div>
11533
11851
  <!-- pyml disable-num-lines 7 no-inline-html -->
11534
11852
  <div class="grid cards example-images">
@@ -11545,23 +11863,23 @@
11545
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>
11546
11864
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.StatsPanel">Code reference</a></p>
11547
11865
  <h4 id="statspanel-examples">StatsPanel Examples<a class="headerlink" href="#statspanel-examples" title="Permanent link">&para;</a></h4>
11548
- <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>
11549
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>
11550
- <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="n">StatsPanel</span><span class="p">(</span>
11551
- <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>
11552
- <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>
11553
- <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>
11554
- <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>
11555
- <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>
11556
- <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>
11557
- <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>
11558
- <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>
11559
- <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a> <span class="c1"># Tuple of (Model, query_string)</span>
11560
- <a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a> <span class="c1"># For complex relationships</span>
11561
- <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>
11562
- <a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a> <span class="c1"># Another complex relationship example</span>
11563
- <a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a> <span class="p">],</span>
11564
- <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>
11565
11883
  </code></pre></div>
11566
11884
  <!-- pyml disable-num-lines 5 no-inline-html -->
11567
11885
  <div class="grid cards example-images">
@@ -11583,31 +11901,31 @@
11583
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>
11584
11902
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.ObjectTextPanel">Code reference</a></p>
11585
11903
  <h4 id="objecttextpanel-examples">ObjectTextPanel Examples<a class="headerlink" href="#objecttextpanel-examples" title="Permanent link">&para;</a></h4>
11586
- <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>
11587
- <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>
11588
- <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="n">ObjectTextPanel</span><span class="p">(</span>
11589
- <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>
11590
- <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>
11591
- <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>
11592
- <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>
11593
- <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>
11594
- <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>
11595
- <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>
11596
11914
  </code></pre></div>
11597
11915
  <h3 id="textpanel">TextPanel<a class="headerlink" href="#textpanel" title="Permanent link">&para;</a></h3>
11598
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>
11599
11917
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.TextPanel">Code reference</a></p>
11600
11918
  <h4 id="textpanel-examples">TextPanel Examples<a class="headerlink" href="#textpanel-examples" title="Permanent link">&para;</a></h4>
11601
- <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>
11602
- <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>
11603
- <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="n">TextPanel</span><span class="p">(</span>
11604
- <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>
11605
- <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>
11606
- <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>
11607
- <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>
11608
- <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>
11609
- <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>
11610
- <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>
11611
11929
  </code></pre></div>
11612
11930
  <h3 id="datatablepanel">DataTablePanel<a class="headerlink" href="#datatablepanel" title="Permanent link">&para;</a></h3>
11613
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>
@@ -11621,14 +11939,14 @@
11621
11939
  </ul>
11622
11940
  </div>
11623
11941
  <h4 id="datatablepanel-examples">DataTablePanel Examples<a class="headerlink" href="#datatablepanel-examples" title="Permanent link">&para;</a></h4>
11624
- <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>
11625
- <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
11626
- <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="n">DataTablePanel</span><span class="p">(</span>
11627
- <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>
11628
- <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>
11629
- <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>
11630
- <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>
11631
- <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>
11632
11950
  </code></pre></div>
11633
11951
  <h3 id="objectstablepanel">ObjectsTablePanel<a class="headerlink" href="#objectstablepanel" title="Permanent link">&para;</a></h3>
11634
11952
  <p>The <code>ObjectsTablePanel</code> is a powerful component for rendering tables of Django model objects,
@@ -11785,52 +12103,52 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11785
12103
  </tbody>
11786
12104
  </table>
11787
12105
  <h4 id="objectstablepanel-examples">ObjectsTablePanel Examples<a class="headerlink" href="#objectstablepanel-examples" title="Permanent link">&para;</a></h4>
11788
- <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>
11789
- <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>
11790
- <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
11791
- <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>
11792
- <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>
11793
- <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>
11794
- <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>
11795
- <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>
11796
- <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a>
11797
- <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>
11798
12116
  </code></pre></div>
11799
- <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>
11800
- <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
11801
- <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">ObjectsTablePanel</span><span class="p">(</span>
11802
- <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>
11803
- <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>
11804
- <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>
11805
- <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>
11806
- <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>
11807
- <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>
11808
- <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>
11809
- <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>
11810
- <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>
11811
- <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>
11812
- <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>
11813
- <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>
11814
12132
  </code></pre></div>
11815
12133
  <h2 id="button-types">Button Types<a class="headerlink" href="#button-types" title="Permanent link">&para;</a></h2>
11816
12134
  <h3 id="button">Button<a class="headerlink" href="#button" title="Permanent link">&para;</a></h3>
11817
12135
  <p>The Button component defines a single button in an object detail view.</p>
11818
12136
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.Button">Code reference</a></p>
11819
12137
  <h4 id="button-examples">Button Examples<a class="headerlink" href="#button-examples" title="Permanent link">&para;</a></h4>
11820
- <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>
11821
- <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a> <span class="o">...</span>
11822
- <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>
11823
- <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>
11824
- <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>
11825
- <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a> <span class="n">Button</span><span class="p">(</span>
11826
- <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>
11827
- <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>
11828
- <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>
11829
- <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>
11830
- <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>
11831
- <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a> <span class="p">),</span>
11832
- <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a> <span class="p">],</span>
11833
- <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>
11834
12152
  </code></pre></div>
11835
12153
  <!-- pyml disable-num-lines 5 no-inline-html -->
11836
12154
  <div class="grid cards example-images">
@@ -11842,36 +12160,36 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11842
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>
11843
12161
  <p><a href="../../code-reference/nautobot/apps/ui.html#nautobot.apps.ui.DropdownButton">Code reference</a></p>
11844
12162
  <h4 id="dropdownbutton-examples">DropdownButton Examples<a class="headerlink" href="#dropdownbutton-examples" title="Permanent link">&para;</a></h4>
11845
- <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>
11846
- <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a> <span class="o">...</span>
11847
- <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>
11848
- <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>
11849
- <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>
11850
- <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>
11851
- <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>
11852
- <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>
11853
- <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>
11854
- <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>
11855
- <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>
11856
- <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>
11857
- <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>
11858
- <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>
11859
- <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>
11860
- <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>
11861
- <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>
11862
- <a id="__codelineno-16-18" name="__codelineno-16-18" href="#__codelineno-16-18"></a> <span class="p">),</span>
11863
- <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>
11864
- <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>
11865
- <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>
11866
- <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>
11867
- <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>
11868
- <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>
11869
- <a id="__codelineno-16-25" name="__codelineno-16-25" href="#__codelineno-16-25"></a> <span class="p">),</span>
11870
- <a id="__codelineno-16-26" name="__codelineno-16-26" href="#__codelineno-16-26"></a> <span class="o">...</span>
11871
- <a id="__codelineno-16-27" name="__codelineno-16-27" href="#__codelineno-16-27"></a> <span class="p">),</span>
11872
- <a id="__codelineno-16-28" name="__codelineno-16-28" href="#__codelineno-16-28"></a> <span class="p">),</span>
11873
- <a id="__codelineno-16-29" name="__codelineno-16-29" href="#__codelineno-16-29"></a> <span class="p">],</span>
11874
- <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>
11875
12193
  </code></pre></div>
11876
12194
  <!-- pyml disable-num-lines 5 no-inline-html -->
11877
12195
  <div class="grid cards example-images">
@@ -11879,54 +12197,194 @@ It integrates with <code>django_tables2</code> and provides extensive customizat
11879
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>
11880
12198
  </ul>
11881
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>
11882
12340
  <h2 id="complete-example">Complete Example<a class="headerlink" href="#complete-example" title="Permanent link">&para;</a></h2>
11883
- <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>
11884
- <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a> <span class="n">SectionChoices</span><span class="p">,</span>
11885
- <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> <span class="n">ObjectFieldsPanel</span><span class="p">,</span>
11886
- <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> <span class="n">ObjectDetailContent</span><span class="p">,</span>
11887
- <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> <span class="n">StatsPanel</span><span class="p">,</span>
11888
- <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="p">)</span>
11889
- <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>
11890
- <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>
11891
- <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a>
11892
- <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>
11893
- <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>
11894
- <a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a>
11895
- <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>
11896
- <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>
11897
- <a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a> <span class="n">ObjectFieldsPanel</span><span class="p">(</span>
11898
- <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>
11899
- <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>
11900
- <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>
11901
- <a id="__codelineno-17-19" name="__codelineno-17-19" href="#__codelineno-17-19"></a> <span class="p">),</span>
11902
- <a id="__codelineno-17-20" name="__codelineno-17-20" href="#__codelineno-17-20"></a> <span class="n">StatsPanel</span><span class="p">(</span>
11903
- <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>
11904
- <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>
11905
- <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>
11906
- <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>
11907
- <a id="__codelineno-17-25" name="__codelineno-17-25" href="#__codelineno-17-25"></a> <span class="n">Device</span><span class="p">,</span>
11908
- <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>
11909
- <a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> <span class="p">],</span>
11910
- <a id="__codelineno-17-28" name="__codelineno-17-28" href="#__codelineno-17-28"></a> <span class="p">),</span>
11911
- <a id="__codelineno-17-29" name="__codelineno-17-29" href="#__codelineno-17-29"></a> <span class="n">GroupedKeyValueTablePanel</span><span class="p">(</span>
11912
- <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>
11913
- <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>
11914
- <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>
11915
- <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>
11916
- <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>
11917
- <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>
11918
- <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>
11919
- <a id="__codelineno-17-37" name="__codelineno-17-37" href="#__codelineno-17-37"></a> <span class="p">}</span>
11920
- <a id="__codelineno-17-38" name="__codelineno-17-38" href="#__codelineno-17-38"></a> <span class="p">},</span>
11921
- <a id="__codelineno-17-39" name="__codelineno-17-39" href="#__codelineno-17-39"></a> <span class="p">),</span>
11922
- <a id="__codelineno-17-40" name="__codelineno-17-40" href="#__codelineno-17-40"></a> <span class="n">ObjectTextPanel</span><span class="p">(</span>
11923
- <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>
11924
- <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>
11925
- <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>
11926
- <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>
11927
- <a id="__codelineno-17-45" name="__codelineno-17-45" href="#__codelineno-17-45"></a> <span class="p">),</span>
11928
- <a id="__codelineno-17-46" name="__codelineno-17-46" href="#__codelineno-17-46"></a> <span class="p">]</span>
11929
- <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>
11930
12388
  </code></pre></div>
11931
12389
  <h2 id="layouts-and-sections">Layouts and Sections<a class="headerlink" href="#layouts-and-sections" title="Permanent link">&para;</a></h2>
11932
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>