|
@@ -6,6 +6,7 @@ from operator import attrgetter
|
|
|
from django.contrib import messages
|
|
|
from django.contrib.auth.decorators import permission_required
|
|
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
|
+from django.core.paginator import EmptyPage, PageNotAnInteger
|
|
|
from django.db.models import Count
|
|
|
from django.http import HttpResponseRedirect
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
|
@@ -17,6 +18,7 @@ from ipam.models import Prefix, Service, VLAN
|
|
|
from circuits.models import Circuit
|
|
|
from extras.models import Graph, TopologyMap, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
|
|
|
from utilities.forms import ConfirmationForm
|
|
|
+from utilities.paginator import EnhancedPaginator
|
|
|
from utilities.views import (
|
|
|
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
|
|
)
|
|
@@ -291,6 +293,46 @@ class RackListView(ObjectListView):
|
|
|
template_name = 'dcim/rack_list.html'
|
|
|
|
|
|
|
|
|
+class RackElevationListView(View):
|
|
|
+ """
|
|
|
+ Display a set of rack elevations side-by-side.
|
|
|
+ """
|
|
|
+
|
|
|
+ def get(self, request):
|
|
|
+
|
|
|
+ racks = Rack.objects.select_related(
|
|
|
+ 'site', 'group', 'tenant', 'role'
|
|
|
+ ).prefetch_related(
|
|
|
+ 'devices__device_type'
|
|
|
+ )
|
|
|
+ racks = filters.RackFilter(request.GET, racks).qs
|
|
|
+ total_count = racks.count()
|
|
|
+
|
|
|
+ # Pagination
|
|
|
+ paginator = EnhancedPaginator(racks, 25)
|
|
|
+ page_number = request.GET.get('page', 1)
|
|
|
+ try:
|
|
|
+ page = paginator.page(page_number)
|
|
|
+ except PageNotAnInteger:
|
|
|
+ page = paginator.page(1)
|
|
|
+ except EmptyPage:
|
|
|
+ page = paginator.page(paginator.num_pages)
|
|
|
+
|
|
|
+ # Determine rack face
|
|
|
+ if request.GET.get('face') == '1':
|
|
|
+ face_id = 1
|
|
|
+ else:
|
|
|
+ face_id = 0
|
|
|
+
|
|
|
+ return render(request, 'dcim/rack_elevation_list.html', {
|
|
|
+ 'paginator': paginator,
|
|
|
+ 'page': page,
|
|
|
+ 'total_count': total_count,
|
|
|
+ 'face_id': face_id,
|
|
|
+ 'filter_form': forms.RackFilterForm(request.GET),
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
def rack(request, pk):
|
|
|
|
|
|
rack = get_object_or_404(Rack.objects.select_related('site__region', 'tenant__group', 'group', 'role'), pk=pk)
|