diff --git a/pems/districts/templates/districts/district.html b/pems/districts/templates/districts/district.html
index 9c77165..0211a3e 100644
--- a/pems/districts/templates/districts/district.html
+++ b/pems/districts/templates/districts/district.html
@@ -1,2 +1,24 @@
-
District {{ district }}
-URL of route: {% url "districts:district" district %}
+{% extends "districts/index.html" %}
+
+{% block headline %}
+ District {{ current_district.number }} - {{ current_district.name }}
+{% endblock headline %}
+
+{% block districts-content %}
+
+
+
+
Details for {{ current_district.name }}
+
+
+
Map
+
+
+{% endblock districts-content %}
diff --git a/pems/districts/templates/districts/index.html b/pems/districts/templates/districts/index.html
index b199e5a..72b4ecf 100644
--- a/pems/districts/templates/districts/index.html
+++ b/pems/districts/templates/districts/index.html
@@ -1,7 +1,46 @@
{% extends "core/base.html" %}
+
{% block headline %}
Districts
{% endblock headline %}
+
{% block inner-content %}
- Districts
+
+
+
+
+
+ {% block districts-content %}
+
+
+
+
Details
+
+
+
Map
+
+
+ {% endblock districts-content %}
+
+
+
+
{% endblock inner-content %}
diff --git a/pems/districts/urls.py b/pems/districts/urls.py
index acdacda..a56d963 100644
--- a/pems/districts/urls.py
+++ b/pems/districts/urls.py
@@ -10,5 +10,5 @@
urlpatterns = [
# /districts
path("", views.IndexView.as_view(), name="index"),
- path("", views.DistrictView.as_view(), name="district"),
+ path("", views.DistrictView.as_view(), name="district"),
]
diff --git a/pems/districts/views.py b/pems/districts/views.py
index 86fae4e..978c693 100644
--- a/pems/districts/views.py
+++ b/pems/districts/views.py
@@ -1,15 +1,26 @@
-from django.views.generic import TemplateView
+from django.views.generic import TemplateView, DetailView
-
-class IndexView(TemplateView):
- template_name = "districts/index.html"
+from .models import District
-class DistrictView(TemplateView):
- template_name = "districts/district.html"
+class DistrictContextMixin:
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
- district = self.kwargs.get("district")
- context["district"] = district
+ districts_ctx = {}
+ districts_ctx["all"] = District.objects.all()
+ context["districts"] = districts_ctx
return context
+
+
+class IndexView(DistrictContextMixin, TemplateView):
+ template_name = "districts/index.html"
+
+
+class DistrictView(DistrictContextMixin, DetailView):
+ model = District
+ context_object_name = "current_district"
+ template_name = "districts/district.html"
+
+ def get_object(self):
+ return District.objects.get(number__iexact=self.kwargs["district_number"])
diff --git a/tests/pytest/pems/districts/test_views.py b/tests/pytest/pems/districts/test_views.py
index d5451f1..5776e00 100644
--- a/tests/pytest/pems/districts/test_views.py
+++ b/tests/pytest/pems/districts/test_views.py
@@ -1,21 +1,33 @@
import pytest
+from django.urls import reverse
from pems.districts import views
+from pems.districts.models import District
-class TestDistrictView:
+class TestIndexView:
@pytest.fixture
def view(app_request):
- v = views.DistrictView()
- v.setup(app_request, district=1)
+ v = views.IndexView()
+ v.setup(app_request)
return v
+ @pytest.mark.django_db
def test_get_context_data(self, view):
context = view.get_context_data()
- assert context["district"] == 1
+ assert set(context.get("districts").get("all")) == set(District.objects.all())
def test_template_name(self, view):
- assert view.template_name == "districts/district.html"
+ assert view.template_name == "districts/index.html"
+
+
+@pytest.mark.django_db
+def test_district_view(client, model_District):
+ url = reverse("districts:district", kwargs={"district_number": model_District.number})
+ response = client.get(url)
+
+ assert response.status_code == 200
+ assert response.context["current_district"] == model_District