1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Clean up device/devicetype tab views

This commit is contained in:
jeremystretch
2021-12-21 10:28:28 -05:00
parent b755c7dab3
commit 57a78b3cad
7 changed files with 97 additions and 89 deletions

View File

@ -111,8 +111,7 @@ class ComponentTemplateTable(BaseTable):
class ConsolePortTemplateTable(ComponentTemplateTable): class ConsolePortTemplateTable(ComponentTemplateTable):
actions = ButtonsColumn( actions = ButtonsColumn(
model=ConsolePortTemplate, model=ConsolePortTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_consoleports'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -124,8 +123,7 @@ class ConsolePortTemplateTable(ComponentTemplateTable):
class ConsoleServerPortTemplateTable(ComponentTemplateTable): class ConsoleServerPortTemplateTable(ComponentTemplateTable):
actions = ButtonsColumn( actions = ButtonsColumn(
model=ConsoleServerPortTemplate, model=ConsoleServerPortTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_consoleserverports'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -137,8 +135,7 @@ class ConsoleServerPortTemplateTable(ComponentTemplateTable):
class PowerPortTemplateTable(ComponentTemplateTable): class PowerPortTemplateTable(ComponentTemplateTable):
actions = ButtonsColumn( actions = ButtonsColumn(
model=PowerPortTemplate, model=PowerPortTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_powerports'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -150,8 +147,7 @@ class PowerPortTemplateTable(ComponentTemplateTable):
class PowerOutletTemplateTable(ComponentTemplateTable): class PowerOutletTemplateTable(ComponentTemplateTable):
actions = ButtonsColumn( actions = ButtonsColumn(
model=PowerOutletTemplate, model=PowerOutletTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_poweroutlets'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -166,8 +162,7 @@ class InterfaceTemplateTable(ComponentTemplateTable):
) )
actions = ButtonsColumn( actions = ButtonsColumn(
model=InterfaceTemplate, model=InterfaceTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_interfaces'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -183,8 +178,7 @@ class FrontPortTemplateTable(ComponentTemplateTable):
color = ColorColumn() color = ColorColumn()
actions = ButtonsColumn( actions = ButtonsColumn(
model=FrontPortTemplate, model=FrontPortTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_frontports'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -196,9 +190,7 @@ class FrontPortTemplateTable(ComponentTemplateTable):
class RearPortTemplateTable(ComponentTemplateTable): class RearPortTemplateTable(ComponentTemplateTable):
color = ColorColumn() color = ColorColumn()
actions = ButtonsColumn( actions = ButtonsColumn(
model=RearPortTemplate, model=RearPortTemplate
buttons=('edit', 'delete'),
return_url_extra='%23tab_rearports'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):
@ -210,8 +202,7 @@ class RearPortTemplateTable(ComponentTemplateTable):
class DeviceBayTemplateTable(ComponentTemplateTable): class DeviceBayTemplateTable(ComponentTemplateTable):
actions = ButtonsColumn( actions = ButtonsColumn(
model=DeviceBayTemplate, model=DeviceBayTemplate,
buttons=('edit', 'delete'), buttons=('edit', 'delete')
return_url_extra='%23tab_devicebays'
) )
class Meta(ComponentTemplateTable.Meta): class Meta(ComponentTemplateTable.Meta):

View File

@ -51,10 +51,21 @@ class DeviceComponentsView(generic.ObjectChildrenView):
class DeviceTypeComponentsView(DeviceComponentsView): class DeviceTypeComponentsView(DeviceComponentsView):
queryset = DeviceType.objects.all() queryset = DeviceType.objects.all()
template_name = 'dcim/devicetype/component_templates.html' template_name = 'dcim/devicetype/component_templates.html'
viewname = None # Used for return_url resolution
def get_children(self, request, parent): def get_children(self, request, parent):
return self.child_model.objects.restrict(request.user, 'view').filter(device_type=parent) return self.child_model.objects.restrict(request.user, 'view').filter(device_type=parent)
def get_extra_context(self, request, instance):
if self.viewname:
return_url = reverse(self.viewname, kwargs={'pk': instance.pk})
else:
return_url = instance.get_absolute_url()
return {
'active_tab': f"{self.child_model._meta.verbose_name_plural.replace(' ', '-')}",
'return_url': return_url,
}
class BulkDisconnectView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): class BulkDisconnectView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
""" """
@ -798,48 +809,56 @@ class DeviceTypeConsolePortsView(DeviceTypeComponentsView):
child_model = ConsolePortTemplate child_model = ConsolePortTemplate
table = tables.ConsolePortTemplateTable table = tables.ConsolePortTemplateTable
filterset = filtersets.ConsolePortTemplateFilterSet filterset = filtersets.ConsolePortTemplateFilterSet
viewname = 'dcim:devicetype_consoleports'
class DeviceTypeConsoleServerPortsView(DeviceTypeComponentsView): class DeviceTypeConsoleServerPortsView(DeviceTypeComponentsView):
child_model = ConsoleServerPortTemplate child_model = ConsoleServerPortTemplate
table = tables.ConsoleServerPortTemplateTable table = tables.ConsoleServerPortTemplateTable
filterset = filtersets.ConsoleServerPortTemplateFilterSet filterset = filtersets.ConsoleServerPortTemplateFilterSet
viewname = 'dcim:devicetype_consoleserverports'
class DeviceTypePowerPortsView(DeviceTypeComponentsView): class DeviceTypePowerPortsView(DeviceTypeComponentsView):
child_model = PowerPortTemplate child_model = PowerPortTemplate
table = tables.PowerPortTemplateTable table = tables.PowerPortTemplateTable
filterset = filtersets.PowerPortTemplateFilterSet filterset = filtersets.PowerPortTemplateFilterSet
viewname = 'dcim:devicetype_powerports'
class DeviceTypePowerOutletsView(DeviceTypeComponentsView): class DeviceTypePowerOutletsView(DeviceTypeComponentsView):
child_model = PowerOutletTemplate child_model = PowerOutletTemplate
table = tables.PowerOutletTemplateTable table = tables.PowerOutletTemplateTable
filterset = filtersets.PowerOutletTemplateFilterSet filterset = filtersets.PowerOutletTemplateFilterSet
viewname = 'dcim:devicetype_poweroutlets'
class DeviceTypeInterfacesView(DeviceTypeComponentsView): class DeviceTypeInterfacesView(DeviceTypeComponentsView):
child_model = InterfaceTemplate child_model = InterfaceTemplate
table = tables.InterfaceTemplateTable table = tables.InterfaceTemplateTable
filterset = filtersets.InterfaceTemplateFilterSet filterset = filtersets.InterfaceTemplateFilterSet
viewname = 'dcim:devicetype_interfaces'
class DeviceTypeFrontPortsView(DeviceTypeComponentsView): class DeviceTypeFrontPortsView(DeviceTypeComponentsView):
child_model = FrontPortTemplate child_model = FrontPortTemplate
table = tables.FrontPortTemplateTable table = tables.FrontPortTemplateTable
filterset = filtersets.FrontPortTemplateFilterSet filterset = filtersets.FrontPortTemplateFilterSet
viewname = 'dcim:devicetype_frontports'
class DeviceTypeRearPortsView(DeviceTypeComponentsView): class DeviceTypeRearPortsView(DeviceTypeComponentsView):
child_model = RearPortTemplate child_model = RearPortTemplate
table = tables.RearPortTemplateTable table = tables.RearPortTemplateTable
filterset = filtersets.RearPortTemplateFilterSet filterset = filtersets.RearPortTemplateFilterSet
viewname = 'dcim:devicetype_rearports'
class DeviceTypeDeviceBaysView(DeviceTypeComponentsView): class DeviceTypeDeviceBaysView(DeviceTypeComponentsView):
child_model = DeviceBayTemplate child_model = DeviceBayTemplate
table = tables.DeviceBayTemplateTable table = tables.DeviceBayTemplateTable
filterset = filtersets.DeviceBayTemplateFilterSet filterset = filtersets.DeviceBayTemplateFilterSet
viewname = 'dcim:devicetype_devicebays'
class DeviceTypeEditView(generic.ObjectEditView): class DeviceTypeEditView(generic.ObjectEditView):

View File

@ -95,74 +95,74 @@
</a> </a>
</li> </li>
{% with interface_count=object.interfaces_count %} {% with tab_name='interfaces' interface_count=object.interfaces_count %}
{% if interface_count %} {% if active_tab == tab_name or interface_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'interfaces' %} active{% endif %}" href="{% url 'dcim:device_interfaces' pk=object.pk %}">Interfaces {% badge interface_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_interfaces' pk=object.pk %}">Interfaces {% badge interface_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with frontport_count=object.frontports.count %} {% with tab_name='front-ports' frontport_count=object.frontports.count %}
{% if frontport_count %} {% if active_tab == tab_name or frontport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'front-ports' %} active{% endif %}" href="{% url 'dcim:device_frontports' pk=object.pk %}">Front Ports {% badge frontport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_frontports' pk=object.pk %}">Front Ports {% badge frontport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with rearport_count=object.rearports.count %} {% with tab_name='rear-ports' rearport_count=object.rearports.count %}
{% if rearport_count %} {% if active_tab == tab_name or rearport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'rear-ports' %} active{% endif %}" href="{% url 'dcim:device_rearports' pk=object.pk %}">Rear Ports {% badge rearport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_rearports' pk=object.pk %}">Rear Ports {% badge rearport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with consoleport_count=object.consoleports.count %} {% with tab_name='console-ports' consoleport_count=object.consoleports.count %}
{% if consoleport_count %} {% if active_tab == tab_name or consoleport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'console-ports' %} active{% endif %}" href="{% url 'dcim:device_consoleports' pk=object.pk %}">Console Ports {% badge consoleport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_consoleports' pk=object.pk %}">Console Ports {% badge consoleport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with consoleserverport_count=object.consoleserverports.count %} {% with tab_name='console-server-ports' consoleserverport_count=object.consoleserverports.count %}
{% if consoleserverport_count %} {% if active_tab == tab_name or consoleserverport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'console-server-ports' %} active{% endif %}" href="{% url 'dcim:device_consoleserverports' pk=object.pk %}">Console Server Ports {% badge consoleserverport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_consoleserverports' pk=object.pk %}">Console Server Ports {% badge consoleserverport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with powerport_count=object.powerports.count %} {% with tab_name='power-ports' powerport_count=object.powerports.count %}
{% if powerport_count %} {% if active_tab == tab_name or powerport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'power-ports' %} active{% endif %}" href="{% url 'dcim:device_powerports' pk=object.pk %}">Power Ports {% badge powerport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_powerports' pk=object.pk %}">Power Ports {% badge powerport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with poweroutlet_count=object.poweroutlets.count %} {% with tab_name='power-outlets' poweroutlet_count=object.poweroutlets.count %}
{% if poweroutlet_count %} {% if active_tab == tab_name or poweroutlet_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'power-outlets' %} active{% endif %}" href="{% url 'dcim:device_poweroutlets' pk=object.pk %}">Power Outlets {% badge poweroutlet_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_poweroutlets' pk=object.pk %}">Power Outlets {% badge poweroutlet_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with devicebay_count=object.devicebays.count %} {% with tab_name='device-bays' devicebay_count=object.devicebays.count %}
{% if devicebay_count %} {% if active_tab == tab_name or devicebay_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'device-bays' %} active{% endif %}" href="{% url 'dcim:device_devicebays' pk=object.pk %}">Device Bays {% badge devicebay_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_devicebays' pk=object.pk %}">Device Bays {% badge devicebay_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with inventoryitem_count=object.inventoryitems.count %} {% with tab_name='inventory-items' inventoryitem_count=object.inventoryitems.count %}
{% if inventoryitem_count %} {% if active_tab == tab_name or inventoryitem_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'inventory' %} active{% endif %}" href="{% url 'dcim:device_inventory' pk=object.pk %}">Inventory {% badge inventoryitem_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:device_inventory' pk=object.pk %}">Inventory {% badge inventoryitem_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}

View File

@ -17,22 +17,22 @@
<div class="noprint bulk-buttons"> <div class="noprint bulk-buttons">
<div class="bulk-button-group"> <div class="bulk-button-group">
{% if perms.dcim.change_devicebay %} {% if perms.dcim.change_devicebay %}
<button type="submit" name="_rename" formaction="{% url 'dcim:devicebay_bulk_rename' %}?return_url={{ object.get_absolute_url }}%23tab_devicebays" class="btn btn-outline-warning btn-sm"> <button type="submit" name="_rename" formaction="{% url 'dcim:devicebay_bulk_rename' %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-outline-warning btn-sm">
<i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename <i class="mdi mdi-pencil-outline" aria-hidden="true"></i> Rename
</button> </button>
<button type="submit" name="_edit" formaction="{% url 'dcim:devicebay_bulk_edit' %}?device={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_devicebays" class="btn btn-warning btn-sm"> <button type="submit" name="_edit" formaction="{% url 'dcim:devicebay_bulk_edit' %}?device={{ object.pk }}&return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-warning btn-sm">
<i class="mdi mdi-pencil" aria-hidden="true"></i> Edit <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
</button> </button>
{% endif %} {% endif %}
{% if perms.dcim.delete_devicebay %} {% if perms.dcim.delete_devicebay %}
<button type="submit" formaction="{% url 'dcim:devicebay_bulk_delete' %}?return_url={{ object.get_absolute_url }}%23tab_devicebays" class="btn btn-outline-danger btn-sm"> <button type="submit" formaction="{% url 'dcim:devicebay_bulk_delete' %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-outline-danger btn-sm">
<i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete selected <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete selected
</button> </button>
{% endif %} {% endif %}
</div> </div>
{% if perms.dcim.add_devicebay %} {% if perms.dcim.add_devicebay %}
<div class="bulk-button-group"> <div class="bulk-button-group">
<a href="{% url 'dcim:devicebay_add' %}?device={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_devicebays" class="btn btn-primary btn-sm"> <a href="{% url 'dcim:devicebay_add' %}?device={{ object.pk }}&return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-primary btn-sm">
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Device Bays <i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add Device Bays
</a> </a>
</div> </div>

View File

@ -18,28 +18,28 @@
</button> </button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% if perms.dcim.add_consoleporttemplate %} {% if perms.dcim.add_consoleporttemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:consoleporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_consoleports">Console Ports</a></li> <li><a class="dropdown-item" href="{% url 'dcim:consoleporttemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_consoleports' pk=object.pk %}">Console Ports</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_consoleserverporttemplate %} {% if perms.dcim.add_consoleserverporttemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:consoleserverporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_consoleserverports">Console Server Ports</a></li> <li><a class="dropdown-item" href="{% url 'dcim:consoleserverporttemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_consoleserverports' pk=object.pk %}">Console Server Ports</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_powerporttemplate %} {% if perms.dcim.add_powerporttemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:powerporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_powerports">Power Ports</a></li> <li><a class="dropdown-item" href="{% url 'dcim:powerporttemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_powerports' pk=object.pk %}">Power Ports</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_poweroutlettemplate %} {% if perms.dcim.add_poweroutlettemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:poweroutlettemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_poweroutlets">Power Outlets</a></li> <li><a class="dropdown-item" href="{% url 'dcim:poweroutlettemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_poweroutlets' pk=object.pk %}">Power Outlets</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_interfacetemplate %} {% if perms.dcim.add_interfacetemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:interfacetemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_interfaces">Interfaces</a></li> <li><a class="dropdown-item" href="{% url 'dcim:interfacetemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_interfaces' pk=object.pk %}">Interfaces</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_frontporttemplate %} {% if perms.dcim.add_frontporttemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:frontporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_frontports">Front Ports</a></li> <li><a class="dropdown-item" href="{% url 'dcim:frontporttemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_frontports' pk=object.pk %}">Front Ports</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_rearporttemplate %} {% if perms.dcim.add_rearporttemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:rearporttemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_rearports">Rear Ports</a></li> <li><a class="dropdown-item" href="{% url 'dcim:rearporttemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_rearports' pk=object.pk %}">Rear Ports</a></li>
{% endif %} {% endif %}
{% if perms.dcim.add_devicebaytemplate %} {% if perms.dcim.add_devicebaytemplate %}
<li><a class="dropdown-item" href="{% url 'dcim:devicebaytemplate_add' %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_devicebays">Device Bays</a></li> <li><a class="dropdown-item" href="{% url 'dcim:devicebaytemplate_add' %}?device_type={{ object.pk }}&return_url={% url 'dcim:devicetype_devicebays' pk=object.pk %}">Device Bays</a></li>
{% endif %} {% endif %}
</ul> </ul>
</div> </div>
@ -53,66 +53,66 @@
</a> </a>
</li> </li>
{% with interface_count=object.interfacetemplates.count %} {% with tab_name='interface-templates' interface_count=object.interfacetemplates.count %}
{% if interface_count %} {% if active_tab == tab_name or interface_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'interface-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_interfaces' pk=object.pk %}">Interfaces {% badge interface_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_interfaces' pk=object.pk %}">Interfaces {% badge interface_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with frontport_count=object.frontporttemplates.count %} {% with tab_name='front-port-templates' frontport_count=object.frontporttemplates.count %}
{% if frontport_count %} {% if active_tab == tab_name or frontport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'front-port-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_frontports' pk=object.pk %}">Front Ports {% badge frontport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_frontports' pk=object.pk %}">Front Ports {% badge frontport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with rearport_count=object.rearporttemplates.count %} {% with tab_name='rear-port-templates' rearport_count=object.rearporttemplates.count %}
{% if rearport_count %} {% if active_tab == tab_name or rearport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'rear-port-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_rearports' pk=object.pk %}">Rear Ports {% badge rearport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_rearports' pk=object.pk %}">Rear Ports {% badge rearport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with consoleport_count=object.consoleporttemplates.count %} {% with tab_name='console-port-templates' consoleport_count=object.consoleporttemplates.count %}
{% if consoleport_count %} {% if active_tab == tab_name or consoleport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'console-port-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_consoleports' pk=object.pk %}">Console Ports {% badge consoleport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_consoleports' pk=object.pk %}">Console Ports {% badge consoleport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with consoleserverport_count=object.consoleserverporttemplates.count %} {% with tab_name='console-server-port-templates' consoleserverport_count=object.consoleserverporttemplates.count %}
{% if consoleserverport_count %} {% if active_tab == tab_name or consoleserverport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'console-server-port-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_consoleserverports' pk=object.pk %}">Console Server Ports {% badge consoleserverport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_consoleserverports' pk=object.pk %}">Console Server Ports {% badge consoleserverport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with powerport_count=object.powerporttemplates.count %} {% with tab_name='power-port-templates' powerport_count=object.powerporttemplates.count %}
{% if powerport_count %} {% if active_tab == tab_name or powerport_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'power-port-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_powerports' pk=object.pk %}">Power Ports {% badge powerport_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_powerports' pk=object.pk %}">Power Ports {% badge powerport_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with poweroutlet_count=object.poweroutlettemplates.count %} {% with tab_name='power-outlet-templates' poweroutlet_count=object.poweroutlettemplates.count %}
{% if poweroutlet_count %} {% if active_tab == tab_name or poweroutlet_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'power-outlet-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_poweroutlets' pk=object.pk %}">Power Outlets {% badge poweroutlet_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_poweroutlets' pk=object.pk %}">Power Outlets {% badge poweroutlet_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% with devicebay_count=object.devicebaytemplates.count %} {% with tab_name='device-bay-templates' devicebay_count=object.devicebaytemplates.count %}
{% if devicebay_count %} {% if active_tab == tab_name or devicebay_count %}
<li role="presentation" class="nav-item"> <li role="presentation" class="nav-item">
<a class="nav-link {% if active_tab == 'device-bay-templates' %} active{% endif %}" href="{% url 'dcim:devicetype_devicebays' pk=object.pk %}">Device Bays {% badge devicebay_count %}</a> <a class="nav-link {% if active_tab == tab_name %} active{% endif %}" href="{% url 'dcim:devicetype_devicebays' pk=object.pk %}">Device Bays {% badge devicebay_count %}</a>
</li> </li>
{% endif %} {% endif %}
{% endwith %} {% endwith %}

View File

@ -13,18 +13,18 @@
</div> </div>
<div class="card-footer noprint"> <div class="card-footer noprint">
{% if table.rows %} {% if table.rows %}
<button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_rename" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning"> <button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_rename" %}?return_url={{ return_url }}" class="btn btn-sm btn-warning">
<span class="mdi mdi-pencil-outline" aria-hidden="true"></span> Rename <span class="mdi mdi-pencil-outline" aria-hidden="true"></span> Rename
</button> </button>
<button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_edit" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-warning"> <button type="submit" name="_edit" formaction="{% url table.Meta.model|viewname:"bulk_edit" %}?return_url={{ return_url }}" class="btn btn-sm btn-warning">
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit <span class="mdi mdi-pencil" aria-hidden="true"></span> Edit
</button> </button>
<button type="submit" name="_delete" formaction="{% url table.Meta.model|viewname:"bulk_delete" %}?return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-danger"> <button type="submit" name="_delete" formaction="{% url table.Meta.model|viewname:"bulk_delete" %}?return_url={{ return_url }}" class="btn btn-sm btn-danger">
<i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
</button> </button>
{% endif %} {% endif %}
<div class="float-end"> <div class="float-end">
<a href="{% url table.Meta.model|viewname:"add" %}?device_type={{ object.pk }}&return_url={{ object.get_absolute_url }}%23tab_{{ tab }}" class="btn btn-primary btn-sm"> <a href="{% url table.Meta.model|viewname:"add" %}?device_type={{ object.pk }}&return_url={{ return_url }}" class="btn btn-primary btn-sm">
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
Add {{ title }} Add {{ title }}
</a> </a>

View File

@ -208,7 +208,6 @@ class ButtonsColumn(tables.TemplateColumn):
:param model: Model class to use for calculating URL view names :param model: Model class to use for calculating URL view names
:param prepend_content: Additional template content to render in the column (optional) :param prepend_content: Additional template content to render in the column (optional)
:param return_url_extra: String to append to the return URL (e.g. for specifying a tab) (optional)
""" """
buttons = ('changelog', 'edit', 'delete') buttons = ('changelog', 'edit', 'delete')
attrs = {'td': {'class': 'text-end text-nowrap noprint'}} attrs = {'td': {'class': 'text-end text-nowrap noprint'}}
@ -220,18 +219,18 @@ class ButtonsColumn(tables.TemplateColumn):
</a> </a>
{{% endif %}} {{% endif %}}
{{% if "edit" in buttons and perms.{app_label}.change_{model_name} %}} {{% if "edit" in buttons and perms.{app_label}.change_{model_name} %}}
<a href="{{% url '{app_label}:{model_name}_edit' pk=record.pk %}}?return_url={{{{ request.path }}}}{{{{ return_url_extra }}}}" class="btn btn-sm btn-warning" title="Edit"> <a href="{{% url '{app_label}:{model_name}_edit' pk=record.pk %}}?return_url={{{{ request.path }}}}" class="btn btn-sm btn-warning" title="Edit">
<i class="mdi mdi-pencil"></i> <i class="mdi mdi-pencil"></i>
</a> </a>
{{% endif %}} {{% endif %}}
{{% if "delete" in buttons and perms.{app_label}.delete_{model_name} %}} {{% if "delete" in buttons and perms.{app_label}.delete_{model_name} %}}
<a href="{{% url '{app_label}:{model_name}_delete' pk=record.pk %}}?return_url={{{{ request.path }}}}{{{{ return_url_extra }}}}" class="btn btn-sm btn-danger" title="Delete"> <a href="{{% url '{app_label}:{model_name}_delete' pk=record.pk %}}?return_url={{{{ request.path }}}}" class="btn btn-sm btn-danger" title="Delete">
<i class="mdi mdi-trash-can-outline"></i> <i class="mdi mdi-trash-can-outline"></i>
</a> </a>
{{% endif %}} {{% endif %}}
""" """
def __init__(self, model, *args, buttons=None, prepend_template=None, return_url_extra='', **kwargs): def __init__(self, model, *args, buttons=None, prepend_template=None, **kwargs):
if prepend_template: if prepend_template:
prepend_template = prepend_template.replace('{', '{{') prepend_template = prepend_template.replace('{', '{{')
prepend_template = prepend_template.replace('}', '}}') prepend_template = prepend_template.replace('}', '}}')
@ -251,7 +250,6 @@ class ButtonsColumn(tables.TemplateColumn):
self.extra_context.update({ self.extra_context.update({
'buttons': buttons or self.buttons, 'buttons': buttons or self.buttons,
'return_url_extra': return_url_extra,
}) })
def header(self): def header(self):