-
+{% block breadcrumbs %}
+
Device Types
+
{{ object.manufacturer }}
+
{{ object.model }}
+{% endblock %}
+
+{% block buttons %}
+ {% if perms.dcim.change_devicetype %}
+
+
+
-
- {% plugin_buttons object %}
- {% if perms.dcim.change_devicetype %}
-
-
-
-
- {% endif %}
- {% if perms.dcim.add_devicetype %}
- {% clone_button object %}
- {% endif %}
- {% if perms.dcim.change_devicetype %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_devicetype %}
- {% delete_button object %}
- {% endif %}
-
-
{{ object.manufacturer }} {{ object.model }}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
+ {% endif %}
+ {% if perms.dcim.add_devicetype %}
+ {% clone_button object %}
+ {% endif %}
+ {% if perms.dcim.change_devicetype %}
+ {% edit_button object %}
+ {% endif %}
+ {% if perms.dcim.delete_devicetype %}
+ {% delete_button object %}
+ {% endif %}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/dcim/powerfeed.html b/netbox/templates/dcim/powerfeed.html
index e8c0f1d29..283eed4c1 100644
--- a/netbox/templates/dcim/powerfeed.html
+++ b/netbox/templates/dcim/powerfeed.html
@@ -1,63 +1,18 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load static %}
{% load custom_links %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.dcim.add_powerfeed %}
- {% clone_button object %}
- {% endif %}
- {% if perms.dcim.change_powerfeed %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_powerfeed %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Cable
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
Power Feeds
+
{{ object.power_panel.site }}
+
{{ object.power_panel }}
+ {% if object.rack %}
+
{{ object.rack }}
+ {% endif %}
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/dcim/powerpanel.html b/netbox/templates/dcim/powerpanel.html
index 179697b4f..fa460eb76 100644
--- a/netbox/templates/dcim/powerpanel.html
+++ b/netbox/templates/dcim/powerpanel.html
@@ -1,59 +1,14 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
-{% load static %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.dcim.change_powerpanel %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_powerpanel %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Cable
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
Power Panels
+
{{ object.site }}
+ {% if object.rack_group %}
+
{{ object.rack_group }}
+ {% endif %}
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/dcim/rack.html b/netbox/templates/dcim/rack.html
index 9c0d72a04..4ef78316d 100644
--- a/netbox/templates/dcim/rack.html
+++ b/netbox/templates/dcim/rack.html
@@ -1,74 +1,46 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
-{% load custom_links %}
{% load helpers %}
{% load static %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
-
- Previous Rack
-
-
- Next Rack
-
- {% if perms.dcim.add_rack %}
- {% clone_button object %}
- {% endif %}
- {% if perms.dcim.change_rack %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_rack %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}Rack {{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
-
- {% custom_links object %}
-
-
- -
- Rack
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block title %}Rack {{ object }}{% endblock %}
+
+{% block breadcrumbs %}
+
Racks
+
{{ object.site }}
+ {% if object.group %}
+ {% for group in object.group.get_ancestors %}
+
{{ group }}
+ {% endfor %}
+
{{ object.group }}
+ {% endif %}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+
+ Previous Rack
+
+
+ Next Rack
+
+ {% if perms.dcim.add_rack %}
+ {% clone_button object %}
+ {% endif %}
+ {% if perms.dcim.change_rack %}
+ {% edit_button object %}
+ {% endif %}
+ {% if perms.dcim.delete_rack %}
+ {% delete_button object %}
+ {% endif %}
+{% endblock %}
+
+{% block tab_buttons %}
+
+ {{ block.super }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/dcim/rackreservation.html b/netbox/templates/dcim/rackreservation.html
index 4760f4192..2affb7946 100644
--- a/netbox/templates/dcim/rackreservation.html
+++ b/netbox/templates/dcim/rackreservation.html
@@ -1,56 +1,23 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load custom_links %}
{% load helpers %}
{% load static %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.dcim.change_rackreservation %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_rackreservation %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Rack
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
Rack Reservations
+
{{ object.rack }}
+
Units {{ object.unit_list }}
+{% endblock %}
+
+{% block buttons %}
+ {% if perms.dcim.change_rackreservation %}
+ {% edit_button object %}
+ {% endif %}
+ {% if perms.dcim.delete_rackreservation %}
+ {% delete_button object %}
+ {% endif %}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html
index 0ffc7e265..6131f1ad9 100644
--- a/netbox/templates/dcim/site.html
+++ b/netbox/templates/dcim/site.html
@@ -1,65 +1,17 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
-{% load static %}
{% load tz %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.dcim.add_site %}
- {% clone_button object %}
- {% endif %}
- {% if perms.dcim.change_site %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_site %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Site
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
Sites
+ {% if object.region %}
+ {% for region in object.region.get_ancestors %}
+
{{ region }}
+ {% endfor %}
+
{{ object.region }}
+ {% endif %}
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/dcim/virtualchassis.html b/netbox/templates/dcim/virtualchassis.html
index eb9972406..21678fa79 100644
--- a/netbox/templates/dcim/virtualchassis.html
+++ b/netbox/templates/dcim/virtualchassis.html
@@ -1,57 +1,24 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load custom_links %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.dcim.change_virtualchassis %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_virtualchassis %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
+{% block breadcrumbs %}
+
Virtual Chassis
+ {% if object.master %}
+
{{ object.master.site }}
+ {% endif %}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+ {% if perms.dcim.change_virtualchassis %}
+ {% edit_button object %}
+ {% endif %}
+ {% if perms.dcim.delete_virtualchassis %}
+ {% delete_button object %}
+ {% endif %}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/extras/configcontext.html b/netbox/templates/extras/configcontext.html
index 408e51b75..015ccb35d 100644
--- a/netbox/templates/extras/configcontext.html
+++ b/netbox/templates/extras/configcontext.html
@@ -1,47 +1,10 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load static %}
-{% block header %}
-
-
-
-
{% block title %}{{ object }}{% endblock %}
+{% block breadcrumbs %}
+
Config Contexts
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/generic/object.html b/netbox/templates/generic/object.html
new file mode 100644
index 000000000..53decf738
--- /dev/null
+++ b/netbox/templates/generic/object.html
@@ -0,0 +1,63 @@
+{% extends 'base.html' %}
+{% load buttons %}
+{% load custom_links %}
+{% load helpers %}
+{% load perms %}
+{% load plugins %}
+
+{% block header %}
+
+
+
+ {% block breadcrumbs %}{% endblock %}
+
+
+
+ {# TODO: Provide absolute search URL #}
+
+
+
+
+ {% plugin_buttons object %}
+ {% block buttons %}
+ {% if request.user|can_add:object %}
+ {% clone_button object %}
+ {% endif %}
+ {% if request.user|can_change:object %}
+ {% edit_button object %}
+ {% endif %}
+ {% if request.user|can_delete:object %}
+ {% delete_button object %}
+ {% endif %}
+ {% endblock %}
+
+
{% block title %}{{ object }}{% endblock %}
+ {% include 'inc/created_updated.html' %}
+
+ {% block tab_buttons %}
+ {% custom_links object %}
+ {% endblock %}
+
+ {% block tabs %}
+
+ {% endblock %}
+{% endblock %}
diff --git a/netbox/templates/ipam/aggregate.html b/netbox/templates/ipam/aggregate.html
index ce8cb0a19..69403f9b6 100644
--- a/netbox/templates/ipam/aggregate.html
+++ b/netbox/templates/ipam/aggregate.html
@@ -1,59 +1,18 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load custom_links %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.ipam.add_aggregate %}
- {% clone_button object %}
- {% endif %}
- {% if perms.ipam.change_aggregate %}
- {% edit_button object %}
- {% endif %}
- {% if perms.ipam.delete_aggregate %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
- {% include 'ipam/inc/toggle_available.html' %}
-
- {% custom_links object %}
-
-
+{% block breadcrumbs %}
+
Aggregates
+
{{ object.rir }}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+ {% include 'ipam/inc/toggle_available.html' %}
+ {{ block.super }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/ipam/inc/toggle_available.html b/netbox/templates/ipam/inc/toggle_available.html
index 161f6b788..b8a2d42fa 100644
--- a/netbox/templates/ipam/inc/toggle_available.html
+++ b/netbox/templates/ipam/inc/toggle_available.html
@@ -1,13 +1,11 @@
{% load helpers %}
{% if show_available is not None %}
-
+
{% endif %}
diff --git a/netbox/templates/ipam/ipaddress.html b/netbox/templates/ipam/ipaddress.html
index 8fe98d4da..518507978 100644
--- a/netbox/templates/ipam/ipaddress.html
+++ b/netbox/templates/ipam/ipaddress.html
@@ -1,61 +1,14 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
{% load render_table from django_tables2 %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.ipam.add_ipaddress %}
- {% clone_button object %}
- {% endif %}
- {% if perms.ipam.change_ipaddress %}
- {%edit_button object %}
- {% endif %}
- {% if perms.ipam.delete_ipaddress %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
+{% block breadcrumbs %}
+
IP Addresses
+ {% if object.vrf %}
+
{{ object.vrf }}
+ {% endif %}
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/ipam/prefix.html b/netbox/templates/ipam/prefix.html
index d195affb2..51152a99b 100644
--- a/netbox/templates/ipam/prefix.html
+++ b/netbox/templates/ipam/prefix.html
@@ -1,79 +1,49 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.ipam.add_prefix and active_tab == 'prefixes' and first_available_prefix %}
-
- Add Child Prefix
-
- {% endif %}
- {% if perms.ipam.add_ipaddress and active_tab == 'ip-addresses' and first_available_ip %}
-
-
- Add an IP Address
-
- {% endif %}
- {% if perms.ipam.add_prefix %}
- {% clone_button object %}
- {% endif %}
- {% if perms.ipam.change_prefix %}
- {% edit_button object %}
- {% endif %}
- {% if perms.ipam.delete_prefix %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
- {% include 'ipam/inc/toggle_available.html' %}
-
- {% custom_links object %}
-
+{% block breadcrumbs %}
+
Prefixes
+ {% if object.vrf %}
+
{{ object.vrf }}
+ {% endif %}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+ {% include 'ipam/inc/toggle_available.html' %}
+ {% if perms.ipam.add_prefix and active_tab == 'prefixes' and first_available_prefix %}
+
+ Add Child Prefix
+
+ {% endif %}
+ {% if perms.ipam.add_ipaddress and active_tab == 'ip-addresses' and first_available_ip %}
+
+
+ Add an IP Address
+
+ {% endif %}
+ {{ block.super }}
+{% endblock %}
+
+{% block tabs %}
{% endblock %}
diff --git a/netbox/templates/ipam/routetarget.html b/netbox/templates/ipam/routetarget.html
index 3443d0bf4..c9ce8f835 100644
--- a/netbox/templates/ipam/routetarget.html
+++ b/netbox/templates/ipam/routetarget.html
@@ -1,57 +1,10 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.ipam.add_routetarget %}
- {% clone_button object %}
- {% endif %}
- {% if perms.ipam.change_routetarget %}
- {% edit_button object %}
- {% endif %}
- {% if perms.ipam.delete_routetarget %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}Route target {{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
+{% block breadcrumbs %}
+
Route Targets
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/ipam/service.html b/netbox/templates/ipam/service.html
index d3e94b90d..0dbd48789 100644
--- a/netbox/templates/ipam/service.html
+++ b/netbox/templates/ipam/service.html
@@ -1,45 +1,25 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
-{% load custom_links %}
{% load helpers %}
+{% load perms %}
{% load plugins %}
+{% block breadcrumbs %}
+
Services
+
{{ object.parent }}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+ {% if request.user|can_change:object %}
+ {% edit_button object %}
+ {% endif %}
+ {% if request.user|can_delete:object %}
+ {% delete_button object %}
+ {% endif %}
+{% endblock %}
+
{% block content %}
-
-
- {% plugin_buttons object %}
- {% if perms.dcim.change_service %}
- {% edit_button object %}
- {% endif %}
- {% if perms.dcim.delete_service %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
-{% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
diff --git a/netbox/templates/ipam/vlan.html b/netbox/templates/ipam/vlan.html
index 52286e29d..f4db12f25 100644
--- a/netbox/templates/ipam/vlan.html
+++ b/netbox/templates/ipam/vlan.html
@@ -1,69 +1,37 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.ipam.add_vlan %}
- {% clone_button object %}
- {% endif %}
- {% if perms.ipam.change_vlan %}
- {% edit_button object %}
- {% endif %}
- {% if perms.ipam.delete_vlan %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}VLAN {{ object.display_name }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
+{% block title %}VLAN {{ object.display_name }}{% endblock %}
+
+{% block breadcrumbs %}
+
VLANs
+ {% if object.site %}
+
{{ object.site }}
+ {% endif %}
+ {% if object.group %}
+
{{ object.group }}
+ {% endif %}
+
{{ object }}
+{% endblock %}
+
+{% block tabs %}
+
{% endblock %}
{% block content %}
diff --git a/netbox/templates/ipam/vrf.html b/netbox/templates/ipam/vrf.html
index d17f8e9b9..a8bef57f2 100644
--- a/netbox/templates/ipam/vrf.html
+++ b/netbox/templates/ipam/vrf.html
@@ -1,57 +1,14 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load custom_links %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
-
- - VRFs
- - {{ object }}
-
-
-
-
-
- {% plugin_buttons object %}
- {% if perms.ipam.add_vrf %}
- {% clone_button object %}
- {% endif %}
- {% if perms.ipam.change_vrf %}
- {% edit_button object %}
- {% endif %}
- {% if perms.ipam.delete_vrf %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}VRF {{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- VRF
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block title %}VRF {{ object }}{% endblock %}
+
+{% block breadcrumbs %}
+
VRFs
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/secrets/secret.html b/netbox/templates/secrets/secret.html
index 8921c5c65..3c0d1977d 100644
--- a/netbox/templates/secrets/secret.html
+++ b/netbox/templates/secrets/secret.html
@@ -1,45 +1,23 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
-{% load custom_links %}
{% load helpers %}
{% load static %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.secrets.change_secret %}
- {% edit_button object %}
- {% endif %}
- {% if perms.secrets.delete_secret %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Secret
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
Secrets
+
{{ object.role }}
+
{{ object.assigned_object }}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+ {% if perms.secrets.change_secret %}
+ {% edit_button object %}
+ {% endif %}
+ {% if perms.secrets.delete_secret %}
+ {% delete_button object %}
+ {% endif %}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/tenancy/tenant.html b/netbox/templates/tenancy/tenant.html
index 00044f1c3..2dd7ac7b0 100644
--- a/netbox/templates/tenancy/tenant.html
+++ b/netbox/templates/tenancy/tenant.html
@@ -1,60 +1,13 @@
-{% extends 'base.html' %}
-{% load buttons %}
-{% load custom_links %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.tenancy.add_tenant %}
- {% clone_button object %}
- {% endif %}
- {% if perms.tenancy.change_tenant %}
- {% edit_button object %}
- {% endif %}
- {% if perms.tenancy.delete_tenant %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Tenant
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
Tenants
+ {% if object.group %}
+
{{ object.group }}
+ {% endif %}
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html
index 2f1a50883..c065d52e1 100644
--- a/netbox/templates/virtualization/cluster.html
+++ b/netbox/templates/virtualization/cluster.html
@@ -1,60 +1,15 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load custom_links %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.virtualization.add_cluster %}
- {% clone_button object %}
- {% endif %}
- {% if perms.virtualization.change_cluster %}
- {% edit_button object %}
- {% endif %}
- {% if perms.virtualization.delete_cluster %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
- -
- Cluster
-
- {% if perms.extras.view_objectchange %}
- -
- Change Log
-
- {% endif %}
-
+{% block breadcrumbs %}
+
{{ object.type }}
+ {% if object.group %}
+
{{ object.group }}
+ {% endif %}
+
{{ object }}
{% endblock %}
{% block content %}
diff --git a/netbox/templates/virtualization/virtualmachine.html b/netbox/templates/virtualization/virtualmachine.html
index 8baec6956..43f1fc5e7 100644
--- a/netbox/templates/virtualization/virtualmachine.html
+++ b/netbox/templates/virtualization/virtualmachine.html
@@ -1,70 +1,42 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load buttons %}
{% load custom_links %}
{% load static %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% if perms.virtualization.add_vminterface %}
-
- Add Interfaces
-
- {% endif %}
- {% plugin_buttons object %}
- {% if perms.virtualization.add_virtualmachine %}
- {% clone_button object %}
- {% endif %}
- {% if perms.virtualization.change_virtualmachine %}
- {% edit_button object %}
- {% endif %}
- {% if perms.virtualization.delete_virtualmachine %}
- {% delete_button object %}
- {% endif %}
-
-
{% block title %}{{ object }}{% endblock %}
- {% include 'inc/created_updated.html' %}
-
- {% custom_links object %}
-
-
+{% block breadcrumbs %}
+ {% if object.cluster %}
+
{{ object.cluster }}
+ {% endif %}
+
{{ object }}
+{% endblock %}
+
+{% block buttons %}
+ {% if perms.virtualization.add_vminterface %}
+
+ Add Interfaces
+
+ {% endif %}
+ {{ block.super }}
+{% endblock %}
+
+{% block tabs %}
+
{% endblock %}
{% block content %}
diff --git a/netbox/templates/virtualization/vminterface.html b/netbox/templates/virtualization/vminterface.html
index 7263fd9ae..6a1d77cae 100644
--- a/netbox/templates/virtualization/vminterface.html
+++ b/netbox/templates/virtualization/vminterface.html
@@ -1,41 +1,13 @@
-{% extends 'base.html' %}
+{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
-{% block header %}
-
-
- {% plugin_buttons object %}
- {% if perms.virtualization.change_vminterface %}
-
- Edit
-
- {% endif %}
- {% if perms.virtualization.delete_vminterface %}
-
- Delete
-
- {% endif %}
-
-
{% block title %}{{ object.virtual_machine }} / {{ object.name }}{% endblock %}
-
+{% block title %}{{ object.virtual_machine }} / {{ object.name }}{% endblock %}
+
+{% block breadcrumbs %}
+
Virtual Machines
+
{{ object.virtual_machine }}
+
{{ object }}
{% endblock %}
{% block content %}