diff --git a/peachjam/models/judgment.py b/peachjam/models/judgment.py
index c3059ead3..b46c9d178 100644
--- a/peachjam/models/judgment.py
+++ b/peachjam/models/judgment.py
@@ -89,6 +89,9 @@ class Meta:
def __str__(self):
return self.name
+ def get_absolute_url(self):
+ return reverse("court_class", args=[self.slug])
+
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
return super().save(*args, **kwargs)
@@ -134,6 +137,9 @@ class Meta:
def __str__(self):
return self.name
+ def get_absolute_url(self):
+ return reverse("court", args=[self.code])
+
class CourtRegistryManager(models.Manager):
def get_queryset(self):
diff --git a/peachjam/templates/peachjam/_court_class_month_list.html b/peachjam/templates/peachjam/_court_class_month_list.html
index ffd1eb461..7d45f7598 100644
--- a/peachjam/templates/peachjam/_court_class_month_list.html
+++ b/peachjam/templates/peachjam/_court_class_month_list.html
@@ -1,9 +1,11 @@
{% extends "peachjam/_court_months_list.html" %}
{% load i18n %}
-{% block all_months_link %}
- {% trans 'All months' %}
-{% endblock %}
{% block month_link %}
{{ m|date:"F" }}
{% endblock %}
+{% block month_option %}
+
+{% endblock %}
diff --git a/peachjam/templates/peachjam/_court_class_years_list.html b/peachjam/templates/peachjam/_court_class_years_list.html
index 5dcf5b24d..e6ef9c082 100644
--- a/peachjam/templates/peachjam/_court_class_years_list.html
+++ b/peachjam/templates/peachjam/_court_class_years_list.html
@@ -1,9 +1,11 @@
{% extends "peachjam/_court_years_list.html" %}
{% load i18n %}
-{% block all_years_link %}
- {% trans 'All years' %}
-{% endblock %}
{% block year_link %}
{{ y.year }}
{% endblock %}
+{% block year_option %}
+
+{% endblock %}
diff --git a/peachjam/templates/peachjam/_court_list.html b/peachjam/templates/peachjam/_court_list.html
index 3bc56ea97..5b54502da 100644
--- a/peachjam/templates/peachjam/_court_list.html
+++ b/peachjam/templates/peachjam/_court_list.html
@@ -13,8 +13,8 @@
{{ court_class }}
{% endfor %}
{% if court_class.show_listing_page %}
- View All
+ {% trans 'View all' %}
{% endif %}
{% else %}
{% trans 'No courts found.' %}
diff --git a/peachjam/templates/peachjam/_court_months_list.html b/peachjam/templates/peachjam/_court_months_list.html
index 5c274baa2..0d4472fc9 100644
--- a/peachjam/templates/peachjam/_court_months_list.html
+++ b/peachjam/templates/peachjam/_court_months_list.html
@@ -4,10 +4,8 @@
class="pl-0 mt-2 mb-3 align-items-center d-none d-lg-flex">
{% for m in months %}
@@ -29,9 +27,12 @@
{% trans 'All months' %}
{% for m in months %}
-
+ {% block month_option %}
+
+ {% endblock %}
{% endfor %}
{% endif %}
diff --git a/peachjam/templates/peachjam/_court_registries_months_list.html b/peachjam/templates/peachjam/_court_registries_months_list.html
index ec3e591d5..9e5726e97 100644
--- a/peachjam/templates/peachjam/_court_registries_months_list.html
+++ b/peachjam/templates/peachjam/_court_registries_months_list.html
@@ -1,9 +1,11 @@
{% extends "peachjam/_court_months_list.html" %}
{% load i18n %}
-{% block all_months_link %}
- {% trans 'All months' %}
-{% endblock %}
{% block month_link %}
{{ m|date:"F" }}
{% endblock %}
+{% block month_option %}
+
+{% endblock %}
diff --git a/peachjam/templates/peachjam/_court_registries_years_list.html b/peachjam/templates/peachjam/_court_registries_years_list.html
index c46766aab..5c07f69b9 100644
--- a/peachjam/templates/peachjam/_court_registries_years_list.html
+++ b/peachjam/templates/peachjam/_court_registries_years_list.html
@@ -1,9 +1,11 @@
{% extends "peachjam/_court_years_list.html" %}
{% load i18n %}
-{% block all_years_link %}
- {% trans 'All months' %}
-{% endblock %}
{% block year_link %}
{{ y.year }}
{% endblock %}
+{% block year_option %}
+
+{% endblock %}
diff --git a/peachjam/templates/peachjam/_court_years_list.html b/peachjam/templates/peachjam/_court_years_list.html
index 54fa081d1..1341923a2 100644
--- a/peachjam/templates/peachjam/_court_years_list.html
+++ b/peachjam/templates/peachjam/_court_years_list.html
@@ -3,10 +3,8 @@
{% for y in years %}
@@ -28,9 +26,12 @@
{% trans 'All years' %}
{% for y in years %}
-
+ {% block year_option %}
+
+ {% endblock %}
{% endfor %}
{% endif %}
diff --git a/peachjam/tests/test_views.py b/peachjam/tests/test_views.py
index c77ab2d17..fe91e57b2 100644
--- a/peachjam/tests/test_views.py
+++ b/peachjam/tests/test_views.py
@@ -55,13 +55,8 @@ def test_court_listing(self):
"Ababacar and Ors vs Senegal [2018] ECOWASCJ 17 (29 June 2018)",
documents,
)
- self.assertEqual(
- response.context["years"],
- [
- {"url": "/judgments/ECOWASCJ/2018/", "year": 2018},
- {"url": "/judgments/ECOWASCJ/2016/", "year": 2016},
- ],
- )
+ self.assertContains(response, "/judgments/ECOWASCJ/2018/")
+ self.assertContains(response, "/judgments/ECOWASCJ/2016/")
self.assertNotIn("years", response.context["facet_data"], [2016, 2018])
def test_court_year_listing(self):
@@ -79,13 +74,8 @@ def test_court_year_listing(self):
documents,
)
self.assertEqual(response.context["year"], 2016)
- self.assertEqual(
- response.context["years"],
- [
- {"url": "/judgments/ECOWASCJ/2018/", "year": 2018},
- {"url": "/judgments/ECOWASCJ/2016/", "year": 2016},
- ],
- )
+ self.assertContains(response, "/judgments/ECOWASCJ/2018/")
+ self.assertContains(response, "/judgments/ECOWASCJ/2016/")
self.assertNotIn("years", response.context["facet_data"], [2016, 2018])
def test_judgment_detail(self):
diff --git a/peachjam/views/courts.py b/peachjam/views/courts.py
index c73bb7aaa..665528595 100644
--- a/peachjam/views/courts.py
+++ b/peachjam/views/courts.py
@@ -1,15 +1,18 @@
+from functools import cached_property
from itertools import groupby
from django.http import Http404
from django.shortcuts import get_object_or_404
+from django.urls import reverse
from django.utils.dates import MONTHS
+from django.utils.text import gettext_lazy as _
from peachjam.helpers import chunks, lowercase_alphabet
from peachjam.models import Court, CourtClass, CourtRegistry, Judgment
from peachjam.views.generic_views import FilteredDocumentListView
-class BaseJudgmentFilterView(FilteredDocumentListView):
+class FilteredJudgmentView(FilteredDocumentListView):
"""Base List View class for filtering judgments."""
model = Judgment
@@ -17,7 +20,7 @@ class BaseJudgmentFilterView(FilteredDocumentListView):
queryset = Judgment.objects.prefetch_related("judges", "labels")
def base_view_name(self):
- return "Judgments"
+ return _("Judgments")
def page_title(self):
return self.base_view_name()
@@ -90,10 +93,10 @@ def grouped_judgments(self, documents):
return [{"key": key, "judgments": list(group)} for key, group in groups]
-class CourtDetailView(BaseJudgmentFilterView):
+class CourtDetailView(FilteredJudgmentView):
template_name = "peachjam/court_detail.html"
- @property
+ @cached_property
def court(self):
return get_object_or_404(Court, code=self.kwargs.get("code"))
@@ -112,6 +115,7 @@ def get_context_data(self, **kwargs):
judgments__isnull=True
) # display registries with judgments only
context["registry_groups"] = list(chunks(context["registries"], 2))
+ context["all_years_url"] = self.court.get_absolute_url()
return context
@@ -144,7 +148,12 @@ def populate_months(self, context):
class CourtYearView(YearMixin, CourtDetailView):
- pass
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context["all_months_url"] = reverse(
+ "court_year", args=[self.court.code, self.year]
+ )
+ return context
class MonthMixin:
@@ -181,7 +190,7 @@ class RegistryMixin:
def base_view_name(self):
return self.registry.name
- @property
+ @cached_property
def registry(self):
return get_object_or_404(CourtRegistry, code=self.kwargs.get("registry_code"))
@@ -191,6 +200,7 @@ def get_base_queryset(self, *args, **kwargs):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["registry"] = self.registry
+ context["all_years_url"] = self.registry.get_absolute_url()
return context
@@ -198,21 +208,26 @@ class CourtRegistryDetailView(RegistryMixin, CourtDetailView):
pass
-class CourtRegistryYearView(RegistryMixin, CourtYearView):
- pass
+class CourtRegistryYearView(YearMixin, CourtRegistryDetailView):
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context["all_months_url"] = reverse(
+ "court_registry_year", args=[self.court.code, self.registry.code, self.year]
+ )
+ return context
-class CourtRegistryMonthView(RegistryMixin, CourtMonthView):
+class CourtRegistryMonthView(MonthMixin, CourtRegistryYearView):
pass
-class CourtClassDetailView(BaseJudgmentFilterView):
+class CourtClassDetailView(FilteredJudgmentView):
template_name = "peachjam/court_class_detail.html"
def base_view_name(self):
return self.court_class.name
- @property
+ @cached_property
def court_class(self):
return get_object_or_404(CourtClass, slug=self.kwargs["court_class"])
@@ -227,12 +242,20 @@ def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["court_class"] = self.court_class
context["registries"] = Court.objects.filter(court_class=self.court_class)
+ context["registry_label_plural"] = _("Courts")
context["registry_groups"] = list(chunks(context["registries"], 2))
+ context["all_years_url"] = self.court_class.get_absolute_url()
+
return context
class CourtClassYearView(YearMixin, CourtClassDetailView):
- pass
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context["all_months_url"] = reverse(
+ "court_class_year", args=[self.court_class.slug, self.year]
+ )
+ return context
class CourtClassMonthView(MonthMixin, CourtClassYearView):