From 0fb46af423ad2a834c6b736b7b6cd6f06f29498e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@cs.tu-darmstadt.de> Date: Thu, 17 Oct 2019 16:37:00 +0200 Subject: [PATCH] Introduce event slug based url handling Create mixin (FilterByEventSlugMixin) to handle even slug parsing in generic views Add submission url config Include submission urls in central url config Add index view for submissions --- AKModel/views.py | 27 ++++++++++++++++++++++++++- AKPlanning/urls.py | 3 ++- AKSubmission/urls.py | 14 ++++++++++++++ AKSubmission/views.py | 12 +++++++++++- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 AKSubmission/urls.py diff --git a/AKModel/views.py b/AKModel/views.py index 60f00ef0..55d76b42 100644 --- a/AKModel/views.py +++ b/AKModel/views.py @@ -1 +1,26 @@ -# Create your views here. +from django.http import Http404 + +from AKModel.models import Event + + +class FilterByEventSlugMixin: + """ + Mixin to filter different querysets based on a event slug from the request url + """ + event = None + + def get_queryset(self): + # Find event based on event slug + try: + self.event = Event.get_by_slug(self.kwargs.get("event_slug", None)) + except Event.DoesNotExist: + raise Http404 + + # Filter current queryset based on url event slug or return 404 if event slug is invalid + return super().get_queryset().filter(event=self.event) + + def get_context_data(self, *, object_list=None, **kwargs): + context = super().get_context_data(object_list=object_list, **kwargs) + # Add event to context (to make it accessible in templates) + context["event"] = self.event + return context diff --git a/AKPlanning/urls.py b/AKPlanning/urls.py index e6a858b3..959681e6 100644 --- a/AKPlanning/urls.py +++ b/AKPlanning/urls.py @@ -14,8 +14,9 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), + path('', include('AKSubmission.urls', namespace='submit')), ] diff --git a/AKSubmission/urls.py b/AKSubmission/urls.py new file mode 100644 index 00000000..000bcc51 --- /dev/null +++ b/AKSubmission/urls.py @@ -0,0 +1,14 @@ +from django.urls import path, include + +from . import views + +app_name = "submit" + +urlpatterns = [ + path( + '<slug:event_slug>/', + include([ + path('submission/', views.SubmissionOverviewView.as_view(), name='submission_overview'), + ]) + ), +] diff --git a/AKSubmission/views.py b/AKSubmission/views.py index 60f00ef0..634334d0 100644 --- a/AKSubmission/views.py +++ b/AKSubmission/views.py @@ -1 +1,11 @@ -# Create your views here. +from django.views.generic import ListView + +from AKModel.models import AK +from AKModel.views import FilterByEventSlugMixin + + +class SubmissionOverviewView(FilterByEventSlugMixin, ListView): + model = AK + context_object_name = "AKs" + template_name = "AKSubmission/submission_overview.html" + ordering = ["type"] -- GitLab