Major templates and views refactoring

This commit is contained in:
2023-01-08 00:40:13 +01:00
parent 9279142a41
commit 9dfa9172f4
13 changed files with 212 additions and 332 deletions

View File

@@ -33,29 +33,41 @@ def order_by_fields():
return (fields[2], fields[0], fields[1], fields[3])
class GetHome(View):
class GetData(View):
def __init__(self):
self.title = "Home"
self.template = "home.html"
self.data = RollingStock.objects.order_by(*order_by_fields())
def get(self, request, page=1):
site_conf = get_site_conf()
rolling_stock = RollingStock.objects.order_by(*order_by_fields())
paginator = Paginator(rolling_stock, site_conf.items_per_page)
rolling_stock = paginator.get_page(page)
paginator = Paginator(self.data, site_conf.items_per_page)
data = paginator.get_page(page)
page_range = paginator.get_elided_page_range(
rolling_stock.number, on_each_side=2, on_ends=1
data.number, on_each_side=2, on_ends=1
)
return render(
request,
"home.html",
self.template,
{
"title": "Home",
"rolling_stock": rolling_stock,
"title": self.title,
"data": data,
"matches": paginator.count,
"page_range": page_range,
},
)
class GetHomeFiltered(View):
class GetRoster(GetData):
def __init__(self):
self.title = "Roster"
self.template = "roster.html"
self.data = RollingStock.objects.order_by(*order_by_fields())
class GetRosterFiltered(View):
def run_search(self, request, search, _filter, page=1):
site_conf = get_site_conf()
if _filter == "search":
@@ -93,12 +105,13 @@ class GetHomeFiltered(View):
query = Q(tags__slug__iexact=search)
else:
raise Http404
rolling_stock = (
RollingStock.objects.filter(query)
.distinct()
.order_by(*order_by_fields())
)
matches = len(rolling_stock)
matches = rolling_stock.count()
paginator = Paginator(rolling_stock, site_conf.items_per_page)
rolling_stock = paginator.get_page(page)
@@ -124,7 +137,7 @@ class GetHomeFiltered(View):
"search_unsafe": search_unsafe,
"filter": _filter,
"matches": matches,
"rolling_stock": rolling_stock,
"data": rolling_stock,
"page_range": page_range,
},
)
@@ -148,7 +161,7 @@ class GetHomeFiltered(View):
# "search_unsafe": search_unsafe,
"filter": _filter,
"matches": matches,
"rolling_stock": rolling_stock,
"data": rolling_stock,
"page_range": page_range,
},
)
@@ -193,26 +206,11 @@ class GetRollingStock(View):
)
class Consists(View):
def get(self, request, page=1):
site_conf = get_site_conf()
consist = Consist.objects.all()
paginator = Paginator(consist, site_conf.items_per_page)
consist = paginator.get_page(page)
page_range = paginator.get_elided_page_range(
consist.number, on_each_side=2, on_ends=1
)
return render(
request,
"consists.html",
{
"title": "Consists",
"consist": consist,
"page_range": page_range,
},
)
class Consists(GetData):
def __init__(self):
self.title = "Consists"
self.template = "consists.html"
self.data = Consist.objects.all()
class GetConsist(View):
@@ -222,7 +220,10 @@ class GetConsist(View):
consist = Consist.objects.get(uuid=uuid)
except ObjectDoesNotExist:
raise Http404
rolling_stock = consist.consist_item.all()
rolling_stock = [
RollingStock.objects.get(uuid=r.rolling_stock_id) for r in
consist.consist_item.all()
]
paginator = Paginator(rolling_stock, site_conf.items_per_page)
rolling_stock = paginator.get_page(page)
@@ -236,75 +237,38 @@ class GetConsist(View):
{
"title": consist,
"consist": consist,
"rolling_stock": rolling_stock,
"data": rolling_stock,
"page_range": page_range,
},
)
class Manufacturers(View):
class Manufacturers(GetData):
def __init__(self):
self.title = "Manufacturers"
self.template = "manufacturers.html"
self.data = None # Set via method get
# overload get method to filter by category
def get(self, request, category, page=1):
site_conf = get_site_conf()
if category not in ("real", "model"):
raise Http404
manufacturers = Manufacturer.objects.filter(category=category)
paginator = Paginator(manufacturers, site_conf.items_per_page)
manufacturers = paginator.get_page(page)
page_range = paginator.get_elided_page_range(
manufacturers.number, on_each_side=2, on_ends=1
)
return render(
request,
"manufacturers.html",
{
"title": "Manufacturers",
"category": category,
"manufacturers": manufacturers,
"page_range": page_range,
},
)
self.data = Manufacturer.objects.filter(category=category)
return super().get(request, page)
class Companies(View):
def get(self, request, page=1):
site_conf = get_site_conf()
company = Company.objects.all()
paginator = Paginator(company, site_conf.items_per_page)
company = paginator.get_page(page)
page_range = paginator.get_elided_page_range(
company.number, on_each_side=2, on_ends=1
)
return render(
request,
"companies.html",
{
"title": "Companies",
"company": company,
"page_range": page_range,
},
)
class Companies(GetData):
def __init__(self):
self.title = "Companies"
self.template = "companies.html"
self.data = Company.objects.all()
class Scales(View):
def get(self, request, page=1):
site_conf = get_site_conf()
scale = Scale.objects.all()
paginator = Paginator(scale, site_conf.items_per_page)
scale = paginator.get_page(page)
page_range = paginator.get_elided_page_range(
scale.number, on_each_side=2, on_ends=1
)
return render(
request,
"scales.html",
{"title": "Scales", "scale": scale, "page_range": page_range},
)
class Scales(GetData):
def __init__(self):
self.title = "Scales"
self.template = "scales.html"
self.data = Scale.objects.all()
class GetFlatpage(View):