From 5bfe5602b8e312592dd7e2607531ede72f2b0a86 Mon Sep 17 00:00:00 2001 From: Andrew Bastien Date: Thu, 26 Oct 2023 13:05:42 -0400 Subject: [PATCH] Refactoring adminsite.py to allow all models and be configurable via settings.py --- evennia/settings_default.py | 18 ++++++++++++++++++ evennia/web/utils/adminsite.py | 24 ++++++++---------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/evennia/settings_default.py b/evennia/settings_default.py index 931d196647..c9f171d107 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -1033,6 +1033,24 @@ MIDDLEWARE = [ "evennia.web.utils.middleware.SharedLoginMiddleware", ] +# A list of Django apps (see INSTALLED_APPS) that will be listed first (if present) +# in the Django web Admin page. +DJANGO_ADMIN_APP_ORDER = [ + "accounts", + "objects", + "scripts", + "comms", + "help", + "typeclasses", + "server", + "sites", + "flatpages", + "auth", + ] + +# The following apps will be excluded from the Django web Admin page. +DJANGO_ADMIN_APP_EXCLUDE = list() + ###################################################################### # Evennia components ###################################################################### diff --git a/evennia/web/utils/adminsite.py b/evennia/web/utils/adminsite.py index cfdbdf3047..3c02e66102 100644 --- a/evennia/web/utils/adminsite.py +++ b/evennia/web/utils/adminsite.py @@ -8,6 +8,7 @@ of that folder for Django to find them). """ +from django.conf import settings from django.contrib import admin from django.contrib.admin import apps @@ -30,20 +31,11 @@ class EvenniaAdminSite(admin.AdminSite): site_header = "Evennia web admin" - app_order = [ - "accounts", - "objects", - "scripts", - "comms", - "help", - "typeclasses", - "server", - "sites", - "flatpages", - "auth", - ] - - def get_app_list(self, request): - app_list = super().get_app_list(request) + def get_app_list(self, request, app_label=None): + app_list = super().get_app_list(request, app_label=app_label) app_mapping = {app["app_label"]: app for app in app_list} - return [app_mapping.get(app_label) for app_label in self.app_order] + out = [app_mapping.pop(app_label) for app_label in settings.DJANGO_ADMIN_APP_ORDER if app_label in app_mapping] + for app in settings.DJANGO_ADMIN_APP_EXCLUDE: + app_mapping.pop(app, None) + out += app_mapping.values() + return out