From aca81a1fc707fc685b81f48729f7d4627b2f4ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de> Date: Sun, 17 May 2020 22:39:52 +0200 Subject: [PATCH] Introduce custom admin This is the base for custom admin views (with admin design and permission checking) Replace default admin site with custom admin site in AKModel Use custom admin index template & apply first basic change Introduce custom admin base template (including bootstrap loading) Introduce Mixin for AdminViews --- AKModel/apps.py | 5 +++++ AKModel/site.py | 22 ++++++++++++++++++++++ AKModel/templates/admin/ak_index.html | 20 ++++++++++++++++++++ AKModel/views.py | 8 ++++++++ AKPlanning/settings.py | 2 +- templates/admin_base.html | 20 ++++++++++++++++++++ 6 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 AKModel/site.py create mode 100644 AKModel/templates/admin/ak_index.html create mode 100644 templates/admin_base.html diff --git a/AKModel/apps.py b/AKModel/apps.py index c7d4c432..5af2af0d 100644 --- a/AKModel/apps.py +++ b/AKModel/apps.py @@ -1,5 +1,10 @@ from django.apps import AppConfig +from django.contrib.admin.apps import AdminConfig class AkmodelConfig(AppConfig): name = 'AKModel' + + +class AKAdminConfig(AdminConfig): + default_site = 'AKModel.site.AKAdminSite' diff --git a/AKModel/site.py b/AKModel/site.py new file mode 100644 index 00000000..56affff9 --- /dev/null +++ b/AKModel/site.py @@ -0,0 +1,22 @@ +from django.contrib.admin import AdminSite + +from AKModel.models import Event + + +class AKAdminSite(AdminSite): + index_template = "admin/ak_index.html" + + def get_urls(self): + from django.urls import path + + urls = super().get_urls() + urls += [ + # path('...', self.admin_view(...)), + ] + return urls + + def index(self, request, extra_context=None): + if extra_context is None: + extra_context = {} + extra_context["active_events"] = Event.objects.filter(active=True) + return super().index(request, extra_context) diff --git a/AKModel/templates/admin/ak_index.html b/AKModel/templates/admin/ak_index.html new file mode 100644 index 00000000..535ba388 --- /dev/null +++ b/AKModel/templates/admin/ak_index.html @@ -0,0 +1,20 @@ +{% extends "admin/index.html" %} + +{% load i18n tz %} + +{% block content %} + <div style="margin-bottom: 20px;"> + <h2>{% trans "Active Events" %}:</h2> + + <ul> + {% for event in active_events %} + <li> + {{ event }} + ({{ event.start|timezone:event.timezone|date:"d.m.y"}} - + {{ event.end|timezone:event.timezone|date:"d.m.y"}}) + </li> + {% endfor %} + </ul> + </div> +{{ block.super }} +{% endblock %} diff --git a/AKModel/views.py b/AKModel/views.py index 1d6b95eb..645797f3 100644 --- a/AKModel/views.py +++ b/AKModel/views.py @@ -1,3 +1,4 @@ +from django.contrib import admin from django.shortcuts import get_object_or_404 from django.views.generic import TemplateView from rest_framework import viewsets, permissions, mixins @@ -50,6 +51,13 @@ class FilterByEventSlugMixin(EventSlugMixin): return super().get_queryset().filter(event=self.event) +class AdminViewMixin: + def get_context_data(self, **kwargs): + extra = admin.site.each_context(self.request) + extra.update(super().get_context_data(**kwargs)) + return extra + + class AKOwnerViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet): permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,) serializer_class = AKOwnerSerializer diff --git a/AKPlanning/settings.py b/AKPlanning/settings.py index 83d1340a..f1421794 100644 --- a/AKPlanning/settings.py +++ b/AKPlanning/settings.py @@ -37,7 +37,7 @@ INSTALLED_APPS = [ 'AKSubmission.apps.AksubmissionConfig', 'AKScheduling.apps.AkschedulingConfig', 'AKPlan.apps.AkplanConfig', - 'django.contrib.admin', + 'AKModel.apps.AKAdminConfig', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', diff --git a/templates/admin_base.html b/templates/admin_base.html new file mode 100644 index 00000000..cecf50f3 --- /dev/null +++ b/templates/admin_base.html @@ -0,0 +1,20 @@ +{% extends "admin/base_site.html" %} + +{% load bootstrap4 %} +{% load fontawesome_5 %} + +{% block extrahead %} + {% bootstrap_css %} + {% bootstrap_javascript jquery='slim' %} + {% fontawesome_5_static %} + + <style> + a.btn { + color: #FFFFFF; + } + + .block-header { + margin-top: 20px; + } + </style> +{% endblock %} -- GitLab