Skip to content
IntegrityError at /wt/api/nextjs/v1/page_by_path/ null value in column "django_site_id" of relation "sitesettings_sitesetting" violates not-null constraint DETAIL: Failing row contains (94, , , 35, null, , null, null, sm, null, null, null). Request Method: GET Request URL: https://host.docker.internal:8000/wt/api/nextjs/v1/page_by_path/?html_path=%2Fkelly%2F&site=dev.weblivion.com%3A80 Django Version: 5.2.11 Python Executable: /projects/weblivion/.venv/bin/python3 Python Version: 3.13.11 Python Path: ['/projects/weblivion', '/projects/weblivion/apps/app-server/app_server', '/home/kevinw/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python313.zip', '/home/kevinw/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13', '/home/kevinw/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/lib-dynload', '/projects/weblivion/.venv/lib/python3.13/site-packages', '/projects/weblivion/apps/app-server', '/projects/weblivion/libs/color-utils', '/projects/weblivion/libs/file-utils', '/projects/weblivion/libs/image-utils', '/projects/weblivion/libs/logoboto', '/projects/weblivion/apps/monoceros', '/projects/weblivion/libs/py-iface', '/projects/weblivion/apps/py-services', '/projects/weblivion/.venv/lib/python3.13/site-packages/setuptools/_vendor'] Server time: Mon, 16 Mar 2026 13:07:34 +0000 Installed Applications: ['daphne', 'channels', 'dal', 'dal_select2', 'dal_queryset_sequence', 'dbsettings', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.humanize', 'django.contrib.staticfiles', 'django.contrib.sitemaps', 'django.contrib.sites', 'django.forms', 'django_extensions', 'formtools', 'rest_framework', 'rest_framework.authtoken', 'dbbackup', 'import_export', 'corsheaders', 'drf_spectacular', 'dj_rest_auth', 'allauth', 'allauth.account', 'allauth.headless', 'allauth.mfa', 'dj_rest_auth.registration', 'allauth.socialaccount', 'allauth.socialaccount.providers.github', 'allauth.socialaccount.providers.nextcloud', 'storages', 'reversion', 'rolepermissions', 'prose', 'dbtemplates', 'treebeard', 'customwagtailadmin', 'sitetree', 'colorfield', 'mjml', 'user_messages', 'djangocodemirror', 'joeflow', 'django_celery_beat', 'django_celery_results', 'wagtail.contrib.forms', 'wagtail.contrib.redirects', 'wagtail.embeds', 'wagtail.sites', 'wagtail.users', 'wagtail.snippets', 'wagtail.documents', 'wagtail.images', 'wagtail.search', 'wagtail.admin', 'wagtail', 'wagtail.api.v2', 'wagtail.contrib.routable_page', 'wagtail.contrib.settings', 'wagtailautocomplete', 'wagtail_modeladmin', 'django_react_templatetags', 'crispy_forms', 'crispy_bootstrap5', 'django_tables2', 'django_bootstrap5', 'phonenumber_field', 'bootstrap_pagination', 'modelcluster', 'taggit', 'wagtail_meta_preview', 'wagtail_headless_preview', 'wagtailmenus', 'wagtailmedia', 'webpack_loader', 'lti_provider', 'pipit', 'customuser', 'forgejo_provider', 'nextcloud_provider', 'sitesettings', 'customimage', 'customdocument', 'custommedia', 'nextjs', 'slides', 'cms', 'blacklava', 'events', 'core', 'site_ops', 'monoceros', 'useraccount', 'catalog', 'contentset', 'blacklabel', 'partner', 'down2learn'] Installed Middleware: ['down2learn.middleware.PartnerSiteMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'allauth.account.middleware.AccountMiddleware'] Traceback (most recent call last): File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 948, in get_or_create return self.get(**kwargs), False ^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( ^ During handling of the above exception (SiteSetting matching query does not exist.), another exception occurred: File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 105, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/psycopg/cursor.py", line 117, in execute raise ex.with_traceback(None) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The above exception (null value in column "django_site_id" of relation "sitesettings_sitesetting" violates not-null constraint DETAIL: Failing row contains (94, , , 35, null, , null, null, sm, null, null, null).) was the direct cause of the following exception: File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 42, in inner response = await get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/core/handlers/base.py", line 253, in _get_response_async response = await wrapped_callback( File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/api/v2/router.py", line 68, in wrapped return func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/viewsets.py", line 125, in view return self.dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 515, in dispatch response = self.handle_exception(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/api/v2/views.py", line 149, in handle_exception return super().handle_exception(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 475, in handle_exception self.raise_uncaught_exception(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 486, in raise_uncaught_exception raise exc ^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/views.py", line 512, in dispatch response = handler(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/nextjs/nextjs_api.py", line 200, in listing_view return page.serve(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 74, in serve response = super().serve(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/contrib/routable_page/models.py", line 173, in serve return view(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 102, in serve_root component = self.build_component({"request": request}) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 297, in build_component props=self.to_dict(context=context, serializer_cls=serializer_cls), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page.py", line 326, in to_dict return serializer.data ^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/serializers.py", line 573, in data ret = super().data ^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/serializers.py", line 251, in data self._data = self.to_representation(self.instance) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/serializers.py", line 540, in to_representation ret[field.field_name] = field.to_representation(attribute) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/rest_framework/fields.py", line 1870, in to_representation return method(value) ^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/down2learn/serializers/partner_branding_mixin.py", line 16, in get_site_setting site_setting_data = super().get_site_setting(page) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/apps/app-server/app_server/cms/pages/base_page_serializer.py", line 87, in get_site_setting site_setting = SiteSetting.for_site(page.get_site()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/wagtail/contrib/settings/models.py", line 158, in for_site instance, created = queryset.get_or_create(site=site) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 955, in get_or_create return self.create(**params), True ^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 665, in create obj.save(force_insert=True, using=self.db) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 902, in save self.save_base( ^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1008, in save_base updated = self._save_table( File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1169, in _save_table results = self._do_insert( File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1210, in _do_insert return manager._insert( File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1873, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/models/sql/compiler.py", line 1882, in execute_sql cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 122, in execute return super().execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 79, in execute return self._execute_with_wrappers( File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 100, in _execute with self.db.wrap_database_errors: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/utils.py", line 91, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/django/db/backends/utils.py", line 105, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/projects/weblivion/.venv/lib/python3.13/site-packages/psycopg/cursor.py", line 117, in execute raise ex.with_traceback(None) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Exception Type: IntegrityError at /wt/api/nextjs/v1/page_by_path/ Exception Value: null value in column "django_site_id" of relation "sitesettings_sitesetting" violates not-null constraint DETAIL: Failing row contains (94, , , 35, null, , null, null, sm, null, null, null). Raised during: nextjs.nextjs_api.PageByPathAPIViewSet Request information: USER: AnonymousUser GET: html_path = '/kelly/' site = 'dev.weblivion.com:80' POST: No POST data FILES: No FILES data COOKIES: = 'undefined' META: CONTENT_TYPE = 'application/json' HTTP_ACCEPT = 'application/json' HTTP_ACCEPT_ENCODING = 'gzip, deflate' HTTP_ACCEPT_LANGUAGE = '*' HTTP_CACHE_CONTROL = 'no-cache' HTTP_CONNECTION = 'keep-alive' HTTP_COOKIE = '********************' HTTP_HOST = 'host.docker.internal:8000' HTTP_SEC_FETCH_MODE = 'same-origin' HTTP_USER_AGENT = 'node' HTTP_X_FORWARDED_PROTO = 'https' PATH_INFO = '/wt/api/nextjs/v1/page_by_path/' QUERY_STRING = 'html_path=%2Fkelly%2F&site=dev.weblivion.com%3A80' REMOTE_ADDR = '192.160.160.136' REMOTE_HOST = '192.160.160.136' REMOTE_PORT = 54108 REQUEST_METHOD = 'GET' SCRIPT_NAME = '' SERVER_NAME = '192.160.160.136' SERVER_PORT = '8000' wsgi.multiprocess = True wsgi.multithread = True Settings: Using settings module settings.local ABSOLUTE_URL_OVERRIDES = {} ACCOUNT_ADAPTER = 'useraccount.adapters.BlacklavaAccountAdapter' ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https' ACCOUNT_EMAIL_VERIFICATION = 'optional' ACCOUNT_LOGIN_METHODS = {'email', 'username'} ACCOUNT_MAX_EMAIL_ADDRESSES = 2 ACCOUNT_RATE_LIMITS = {'change_password': '********************', 'manage_email': '10/m/user', 'reset_password': '********************', 'reauthenticate': '********************', 'reset_password_from_key': '********************', 'signup': '20/m/ip', 'login': '30/m/ip', 'login_failed': '10/m/ip,5/5m/key', 'confirm_email': '1/3m/key'} ACCOUNT_SESSION_REMEMBER = None ACCOUNT_SIGNUP_FIELDS = ['username*', 'email*', 'password1*', 'password2*'] ACCOUNT_SIGNUP_REDIRECT_URL = '/wt/accounts/signup/' ACCOUNT_USERNAME_BLACKLIST = ['blacklava'] ACCOUNT_USERNAME_MIN_LENGTH = 2 ACOUSTID_API_KEY = '********************' ACYL_URL = 'http://172.16.0.1:8011/' ADMINS = [] ADMIN_BUNDLE = 'app-server-bundle' ADMIN_URL = 'wt/dj/' ALLOWED_HOSTS = ['*'] APPEND_SLASH = True APP_VERSION = '0.1.0' ASGI_APPLICATION = 'asgi.application' ATOMIC_REBUILD = True AUTHENTICATION_BACKENDS = '********************' AUTH_PASSWORD_VALIDATORS = '********************' AUTH_USER_MODEL = '********************' BASE_DIR = '/projects/weblivion/apps/app-server' BOOTSTRAP5 = {'wrapper_class': 'my-3', 'horizontal_label_class': 'col-md-4 text-md-right text-md-end', 'horizontal_field_offset_class': 'offset-sm-4', 'horizontal_field_class': 'col-md-8', 'required_css_class': 'field-required', 'error_css_class': 'is-invalid', 'success_css_class': '', 'server_side_validation': True, 'form_renderers': {'default': 'cms.render_bootstrap5.CustomFormRenderer'}, 'field_renderers': {'default': 'cms.render_bootstrap5.CustomFieldRenderer'}} CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:8003/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}, 'sitetree': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:8003/8', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}, 'dbtemplates': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:8003/9', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}}} CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_KEY_PREFIX = '********************' CACHE_MIDDLEWARE_SECONDS = 600 CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = False CELERY_BROKER_URL = 'redis://localhost:8003/1' CELERY_CACHE_BACKEND = 'default' CELERY_RESULT_BACKEND = 'redis://localhost:8003/1' CELERY_TASK_TRACK_STARTED = True CHANNELS_WEBSOCKET_PATH = 'wt/ws/$' CHANNEL_GROUP_BROADCAST = 'broadcast' CHANNEL_LAYERS = {'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': {'hosts': [('localhost', 8003)]}}} CODEMIRROR_BASE_CSS = ['CodeMirror/lib/codemirror.css'] CODEMIRROR_BASE_JS = ['CodeMirror/lib/codemirror.js'] CODEMIRROR_BUNDLE_CSS_NAME = 'dcm-{settings_name}_css' CODEMIRROR_BUNDLE_CSS_OPTIONS = {'filters': 'yui_css', 'output': 'css/dcm-{settings_name}.min.css'} CODEMIRROR_BUNDLE_JS_NAME = 'dcm-{settings_name}_js' CODEMIRROR_BUNDLE_JS_OPTIONS = {'filters': 'yui_js', 'output': 'js/dcm-{settings_name}.min.js'} CODEMIRROR_CSS_ASSET_TAG = '' CODEMIRROR_FIELD_INIT_JS = '' CODEMIRROR_JS_ASSET_TAG = '' CODEMIRROR_MODES = {'css': 'CodeMirror/mode/css/css.js', 'django': 'CodeMirror/mode/django/django.js', 'htmlmixed': 'CodeMirror/mode/htmlmixed/htmlmixed.js', 'javascript': 'CodeMirror/mode/javascript/javascript.js', 'python': 'CodeMirror/mode/python/python.js', 'rst': 'CodeMirror/mode/rst/rst.js', 'stex': 'CodeMirror/mode/stex/stex.js', 'vbscript': 'CodeMirror/mode/vbscript/vbscript.js', 'xml': 'CodeMirror/mode/xml/xml.js'} CODEMIRROR_SETTINGS = {'empty': {}, 'javascript': {'modes': ['javascript'], 'matchBrackets': True, 'continueComments': 'Enter', 'extraKeys': '********************', 'addons': ['CodeMirror/addon/edit/matchbrackets.js', 'CodeMirror/addon/comment/continuecomment.js', 'CodeMirror/addon/comment/comment.js']}, 'restructuredtext': {'mode': 'rst', 'modes': ['python', 'stex', 'rst'], 'addons': ['CodeMirror/addon/mode/overlay.js']}, 'html': {'mode': 'htmlmixed', 'modes': ['xml', 'javascript', 'css', 'vbscript', 'htmlmixed']}, 'django': {'mode': 'django', 'modes': ['xml', 'javascript', 'css', 'vbscript', 'htmlmixed', 'django'], 'addons': ['CodeMirror/addon/mode/overlay.js'], 'theme': 'night', 'themes': ['night', 'eclipse']}, 'css': {'modes': ['css'], 'matchBrackets': True, 'extraKeys': '********************', 'addons': ['CodeMirror/addon/edit/matchbrackets.js', 'CodeMirror/addon/hint/show-hint.js', 'CodeMirror/addon/hint/css-hint.js'], 'extra_css': ['CodeMirror/addon/hint/show-hint.css']}, 'scss': {'mode': 'text/x-scss', 'modes': ['css'], 'matchBrackets': True, 'addons': ['CodeMirror/addon/edit/matchbrackets.js']}, 'python': {'mode': {'name': 'python', 'version': 3, 'singleLineStringErrors': False}, 'modes': ['python'], 'matchBrackets': True, 'addons': ['CodeMirror/addon/edit/matchbrackets.js']}} CODEMIRROR_THEMES = {'3024-day': 'CodeMirror/theme/3024-day.css', '3024-night': 'CodeMirror/theme/3024-night.css', 'abcdef': 'CodeMirror/theme/abcdef.css', 'ambiance': 'CodeMirror/theme/ambiance.css', 'ambiance-mobile': 'CodeMirror/theme/ambiance-mobile.css', 'base16-dark': 'CodeMirror/theme/base16-dark.css', 'base16-light': 'CodeMirror/theme/base16-light.css', 'bespin': 'CodeMirror/theme/bespin.css', 'blackboard': 'CodeMirror/theme/blackboard.css', 'cobalt': 'CodeMirror/theme/cobalt.css', 'colorforth': 'CodeMirror/theme/colorforth.css', 'darcula': 'CodeMirror/theme/darcula.css', 'dracula': 'CodeMirror/theme/dracula.css', 'duotone-dark': 'CodeMirror/theme/duotone-dark.css', 'duotone-light': 'CodeMirror/theme/duotone-light.css', 'eclipse': 'CodeMirror/theme/eclipse.css', 'elegant': 'CodeMirror/theme/elegant.css', 'erlang-dark': 'CodeMirror/theme/erlang-dark.css', 'gruvbox-dark': 'CodeMirror/theme/gruvbox-dark.css', 'hopscotch': 'CodeMirror/theme/hopscotch.css', 'icecoder': 'CodeMirror/theme/icecoder.css', 'idea': 'CodeMirror/theme/idea.css', 'isotope': 'CodeMirror/theme/isotope.css', 'lesser-dark': 'CodeMirror/theme/lesser-dark.css', 'liquibyte': 'CodeMirror/theme/liquibyte.css', 'lucario': 'CodeMirror/theme/lucario.css', 'material': 'CodeMirror/theme/material.css', 'mbo': 'CodeMirror/theme/mbo.css', 'mdn-like': 'CodeMirror/theme/mdn-like.css', 'midnight': 'CodeMirror/theme/midnight.css', 'monokai': 'CodeMirror/theme/monokai.css', 'neat': 'CodeMirror/theme/neat.css', 'neo': 'CodeMirror/theme/neo.css', 'night': 'CodeMirror/theme/night.css', 'oceanic-next': 'CodeMirror/theme/oceanic-next.css', 'panda-syntax': 'CodeMirror/theme/panda-syntax.css', 'paraiso-dark': 'CodeMirror/theme/paraiso-dark.css', 'paraiso-light': 'CodeMirror/theme/paraiso-light.css', 'pastel-on-dark': 'CodeMirror/theme/pastel-on-dark.css', 'railscasts': 'CodeMirror/theme/railscasts.css', 'rubyblue': 'CodeMirror/theme/rubyblue.css', 'seti': 'CodeMirror/theme/seti.css', 'shadowfox': 'CodeMirror/theme/shadowfox.css', 'solarized': 'CodeMirror/theme/solarized.css', 'ssms': 'CodeMirror/theme/ssms.css', 'the-matrix': 'CodeMirror/theme/the-matrix.css', 'tomorrow-night-bright': 'CodeMirror/theme/tomorrow-night-bright.css', 'tomorrow-night-eighties': 'CodeMirror/theme/tomorrow-night-eighties.css', 'ttcn': 'CodeMirror/theme/ttcn.css', 'twilight': 'CodeMirror/theme/twilight.css', 'vibrant-ink': 'CodeMirror/theme/vibrant-ink.css', 'xq-dark': 'CodeMirror/theme/xq-dark.css', 'xq-light': 'CodeMirror/theme/xq-light.css', 'yeti': 'CodeMirror/theme/yeti.css', 'zenburn': 'CodeMirror/theme/zenburn.css'} CORS_ALLOWED_ORIGINS = ['http://172.26.5.250:3000', 'http://localhost:3000', 'http://localhost:5173', 'http://localhost:8000', 'http://host.docker.internal:8081', 'https://host.docker.internal:8082', 'https://host.plasmicdev.com', 'https://studio.plasmic.app'] CORS_ALLOWED_ORIGIN_REGEXES = ['^https://\\w+\\.\\w+\\.weblivion\\.com$', '^https://\\w+\\.weblivion\\.com$', '^https://\\w+\\.plasmic\\.app$'] CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_HEADERS = ['accept', 'accept-encoding', 'authorization', 'content-type', 'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'cache-control'] CORS_ORIGIN_ALLOW_ALL = False CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap5' CRISPY_TEMPLATE_PACK = 'bootstrap5' CSRF_COOKIE_AGE = 31449600 CSRF_COOKIE_DOMAIN = None CSRF_COOKIE_HTTPONLY = False CSRF_COOKIE_NAME = 'csrftoken' CSRF_COOKIE_PATH = '/' CSRF_COOKIE_SAMESITE = 'Lax' CSRF_COOKIE_SECURE = False CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure' CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' CSRF_TRUSTED_ORIGINS = ['http://localhost', 'http://localhost:5173', 'http://host.docker.internal', 'https://*.weblivion.com', 'https://*.weblivion.com:8443'] CSRF_USE_SESSIONS = False CSS_MODULES = {'modules': '/projects/weblivion/dist/modules.scss.json'} CUSTOMIMAGES = {'WEBP_QUALITY': 50, 'JPEG_QUALITY': 50, 'AVIF_QUALITY': 50, 'DEVICE_SIZES': [640, 750, 828, 1080, 1200, 1920, 2048, 3840], 'IMAGE_SIZES': [16, 32, 48, 64, 96, 128, 256, 384, 512], 'FILTER_SPECS': {'image_format_float': 'max-512x512', 'image_format_cinema': 'fill-828x512-c0', 'course_product_detail': 'fill-1280x800-c0'}, 'STATIC_FILTER_SPECS': {'unicornhat_display': 'fill-16x16-c1', 'page_meta_preview': 'fill-1200x640', 'course_product_list': 'fill-512x320-c0'}} DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblivion', 'USER': 'weblivion', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '8004', 'CONN_MAX_AGE': 0, 'OPTIONS': {'pool': False}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}} DATABASE_ROUTERS = [] DATABASE_URL = 'db+postgresql://weblivion:weblivion@localhost/weblivion' DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATA_UPLOAD_MAX_NUMBER_FILES = 100 DATETIME_FORMAT = 'N j, Y, P' DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] DATE_FORMAT = 'N j, Y' DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DBBACKUP_CONNECTORS = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblivion', 'USER': 'weblivion', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '8004', 'CONN_MAX_AGE': 0, 'OPTIONS': {'pool': False}, 'DROP': False}} DBBACKUP_CONNECTOR_MAPPING = {'django.db.backends.postgresql': 'dbbackup.db.postgresql.PgDumpConnector'} DBBACKUP_EMAIL_SUBJECT_PREFIX = '[blacklava.dbbackup] ' DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage' DBBACKUP_STORAGE_OPTIONS = {'location': '/projects/weblivion/apps/../backups'} DBSETTINGS_USE_SITES = True DBTEMPLATES_ADD_DEFAULT_SITE = True DBTEMPLATES_AUTO_POPULATE_CONTENT = True DBTEMPLATES_CACHE_BACKEND = 'dbtemplates' DBTEMPLATES_MEDIA_PREFIX = '/wt/static/dbtemplates/' DBTEMPLATES_USE_CODEMIRROR = True DBTEMPLATES_USE_REDACTOR = False DBTEMPLATES_USE_REVERSION = True DBTEMPLATES_USE_REVERSION_COMPARE = False DBTEMPLATES_USE_TINYMCE = False DEBUG = True DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.' DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' DEFAULT_CHARSET = 'utf-8' DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter' DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FROM_EMAIL = 'noreply@blacklava.com' DEFAULT_INDEX_TABLESPACE = '' DEFAULT_TABLESPACE = '' DISALLOWED_USER_AGENTS = [] DJANGO_DEFAULT_TEMPLATE_PATH = '/projects/weblivion/.venv/lib/python3.13/site-packages/django/forms/templates' DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap5_table.html' DJ_INCOMING_MIXES_PATH = 'incoming/mixes' DJ_INCOMING_TRACKS_PATH = 'incoming/tracks' DJ_OUTPUT_MIXES_PATH = 'mixes' DJ_OUTPUT_TRACKS_PATH = 'tracks' DOWN2LEARN_COURSE_ASSIGNMENT_DAYS = 365 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp4dev.isolationism.com' EMAIL_HOST_PASSWORD = '********************' EMAIL_HOST_USER = None EMAIL_PORT = 25 EMAIL_SSL_CERTFILE = None EMAIL_SSL_KEYFILE = '********************' EMAIL_SUBJECT_PREFIX = '[Django] ' EMAIL_TIMEOUT = None EMAIL_USE_LOCALTIME = False EMAIL_USE_SSL = False EMAIL_USE_TLS = False FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 FILE_UPLOAD_PERMISSIONS = 420 FILE_UPLOAD_TEMP_DIR = None FIRST_DAY_OF_WEEK = 0 FIXTURE_DIRS = [] FORCE_SCRIPT_NAME = None FORGEJO_OAUTH_SERVER_BASEURL = '********************' FORMAT_MODULE_PATH = None FORMS_URLFIELD_ASSUME_HTTPS = False FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' HEADLESS_FRONTEND_URLS = {} IGNORABLE_404_URLS = [] IMAGE_RENDER_KEY = '********************' INSTALLED_APPS = ['daphne', 'channels', 'dal', 'dal_select2', 'dal_queryset_sequence', 'dbsettings', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.humanize', 'django.contrib.staticfiles', 'django.contrib.sitemaps', 'django.contrib.sites', 'django.forms', 'django_extensions', 'formtools', 'rest_framework', 'rest_framework.authtoken', 'dbbackup', 'import_export', 'corsheaders', 'drf_spectacular', 'dj_rest_auth', 'allauth', 'allauth.account', 'allauth.headless', 'allauth.mfa', 'dj_rest_auth.registration', 'allauth.socialaccount', 'allauth.socialaccount.providers.github', 'allauth.socialaccount.providers.nextcloud', 'storages', 'reversion', 'rolepermissions', 'prose', 'dbtemplates', 'treebeard', 'customwagtailadmin', 'sitetree', 'colorfield', 'mjml', 'user_messages', 'djangocodemirror', 'joeflow', 'django_celery_beat', 'django_celery_results', 'wagtail.contrib.forms', 'wagtail.contrib.redirects', 'wagtail.embeds', 'wagtail.sites', 'wagtail.users', 'wagtail.snippets', 'wagtail.documents', 'wagtail.images', 'wagtail.search', 'wagtail.admin', 'wagtail', 'wagtail.api.v2', 'wagtail.contrib.routable_page', 'wagtail.contrib.settings', 'wagtailautocomplete', 'wagtail_modeladmin', 'django_react_templatetags', 'crispy_forms', 'crispy_bootstrap5', 'django_tables2', 'django_bootstrap5', 'phonenumber_field', 'bootstrap_pagination', 'modelcluster', 'taggit', 'wagtail_meta_preview', 'wagtail_headless_preview', 'wagtailmenus', 'wagtailmedia', 'webpack_loader', 'lti_provider', 'pipit', 'customuser', 'forgejo_provider', 'nextcloud_provider', 'sitesettings', 'customimage', 'customdocument', 'custommedia', 'nextjs', 'slides', 'cms', 'blacklava', 'events', 'core', 'site_ops', 'monoceros', 'useraccount', 'catalog', 'contentset', 'blacklabel', 'partner', 'down2learn'] INTERNAL_IPS = ['0.0.0.0;172.16.0.1'] JOEFLOW_CELERY_QUEUE_NAME = 'celery' JOEFLOW_TASK_RUNNER = 'joeflow.runner.celery.task_runner' JWT_SECRET_KEY = '********************' LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('ug', 'Uyghur'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur'] LANGUAGE_CODE = 'en-us' LANGUAGE_COOKIE_AGE = None LANGUAGE_COOKIE_DOMAIN = None LANGUAGE_COOKIE_HTTPONLY = False LANGUAGE_COOKIE_NAME = 'django_language' LANGUAGE_COOKIE_PATH = '/' LANGUAGE_COOKIE_SAMESITE = None LANGUAGE_COOKIE_SECURE = False LOCALE_PATHS = ['/projects/weblivion/apps/app-server/app_server/locale'] LOGGING = {'version': 1, 'disable_existing_loggers': False, 'handlers': {'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'verbose'}, 'file': {'level': 'WARNING', 'class': 'logging.FileHandler', 'filename': '/tmp/django.log', 'formatter': 'verbose'}}, 'formatters': {'verbose': {'format': '{levelname} {asctime} {module} {message}', 'style': '{'}}, 'root': {'handlers': ['console', 'file'], 'level': 'INFO'}} LOGGING_CONFIG = 'logging.config.dictConfig' LOGIN_REDIRECT_URL = '/portal/' LOGIN_URL = '/portal/auth/signin' LOGOUT_REDIRECT_URL = '/portal/' LTI_TOOL_CONFIGURATION = {'title': 'down2learn', 'description': 'down2learn application functional prototype', 'launch_url': 'lti/launch/', 'course_aware': False, 'course_navigation': False, 'new_tab': False, 'allow_ta_access': False} MANAGERS = [] MEDIA_ROOT = '/projects/weblivion/apps/app-server/media' MEDIA_URL = '/wt/media/' MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' META_PREVIEW_IMAGE_DEFAULT_SIZE = 'fill-1200x640' MFA_SUPPORTED_TYPES = ['recovery_codes', 'totp'] MFA_TOTP_DIGITS = 6 MFA_TOTP_PERIOD = 120 MFA_TOTP_TOLERANCE = 3 MIDDLEWARE = ['down2learn.middleware.PartnerSiteMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'allauth.account.middleware.AccountMiddleware'] MIGRATION_MODULES = {} MJML_BACKEND_MODE = 'tcpserver' MJML_TCPSERVERS = "(('127.0.0.1', 28101),)" MONOCEROS_API_URL = '********************' MONTH_DAY_FORMAT = 'F j' NETLIFY_SITE_ID = 'f3429276-3289-4158-9edc-413a59e5ff5f' NETLIFY_TOKEN = '********************' NEXTCLOUD_OAUTH_SERVER_BASEURL = '********************' NEXTCLOUD_STORAGE = {'url': 'https://nc.isolationism.com', 'username': 'kdub', 'password': '********************', 'directory': '/', 'overwrite_file': True} NUMBER_GROUPING = 0 NX_ROOT = '/projects/weblivion/dist' PASSWORD_HASHERS = '********************' PASSWORD_RESET_TIMEOUT = '********************' PHONENUMBER_DB_FORMAT = 'RFC3966' PHONENUMBER_DEFAULT_FORMAT = 'RFC3966' PHONENUMBER_DEFAULT_REGION = 'US' PREPEND_WWW = False PROJECT_DIR = '/projects/weblivion/apps/app-server/app_server' PYLTI_CONFIG = {'consumers': {}} REACT_COMPONENT_PREFIX = '' REDIS_CELERY_DB = '1' REDIS_HOST = 'localhost' REDIS_PORT = 8003 REDIS_SERVER_URL = 'redis://localhost:8003' REDIS_URL = 'redis://localhost:8003' REST_AUTH = '********************' REST_FRAMEWORK = {'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', 'DEFAULT_PAGINATION_CLASS': 'blacklava.api.pagination.ReactPagination', 'PAGE_SIZE': 25, 'SEARCH_PARAM': 'find_text', 'ORDERING_PARAM': 'sort_by', 'DEFAULT_FILTER_BACKENDS': ['blacklava.api.filters.SearchFilter', 'blacklava.api.filters.OrderingFilter', 'blacklava.api.filters.DjangoFilterBackend'], 'DEFAULT_AUTHENTICATION_CLASSES': '********************', 'EXCEPTION_HANDLER': 'customuser.serializers.custom_global_exception_handler'} ROLEPERMISSIONS_MODULE = 'down2learn.roles' ROLEPERMISSIONS_REGISTER_ADMIN = True ROOT_URLCONF = 'blacklava.urls' SECRET_KEY = '********************' SECRET_KEY_FALLBACKS = '********************' SECURE_CONTENT_TYPE_NOSNIFF = True SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin' SECURE_HSTS_INCLUDE_SUBDOMAINS = False SECURE_HSTS_PRELOAD = False SECURE_HSTS_SECONDS = 0 SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')" SECURE_REDIRECT_EXEMPT = [] SECURE_REFERRER_POLICY = 'same-origin' SECURE_SSL_HOST = None SECURE_SSL_REDIRECT = False SERVER_EMAIL = 'root@localhost' SESSION_CACHE_ALIAS = 'default' SESSION_COOKIE_AGE = 1209600 SESSION_COOKIE_DOMAIN = None SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_NAME = 'django_session_id' SESSION_COOKIE_PATH = '/' SESSION_COOKIE_SAMESITE = 'Lax' SESSION_COOKIE_SECURE = False SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_EXPIRE_AT_BROWSER_CLOSE = False SESSION_FILE_PATH = None SESSION_SAVE_EVERY_REQUEST = False SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' SETTINGS_MODULE = 'settings.local' SHORT_DATETIME_FORMAT = 'm/d/Y P' SHORT_DATE_FORMAT = 'm/d/Y' SIGNING_BACKEND = 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS = [] SIMPLE_JWT = {'ACCESS_TOKEN_LIFETIME': '********************', 'REFRESH_TOKEN_LIFETIME': '********************', 'ROTATE_REFRESH_TOKENS': '********************', 'BLACKLIST_AFTER_ROTATION': True, 'USER_ID_CLAIM': 'user_id', 'SIGNING_KEY': '********************'} SITETREE_CACHE_NAME = 'sitetree' SITETREE_MODEL_TREE_ITEM = 'blacklava.NavigationTreeItem' SITE_ID = 1 SOCIALACCOUNT_EMAIL_REQUIRED = True SOCIALACCOUNT_EMAIL_VERIFICATION = 'none' SOCIALACCOUNT_PROVIDERS = {'github': {'SCOPE': ['user:email']}, 'nextcloud': {'SERVER': 'https://nc.isolationism.com'}} SOCIAL_AUTH_LOGIN_REDIRECT_URL = '********************' SPECTACULAR_SETTINGS = {'TITLE': 'Content & Data API', 'VERSION': '1.0.0'} STATICFILES_DIRS = "('/projects/weblivion/dist', '/projects/weblivion/apps/app-server/app_server/blacklava/static')" STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATIC_ROOT = '/projects/weblivion/apps/app-server/static' STATIC_URL = '/wt/static/' STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}, 'nextcloud': {'BACKEND': 'nextcloud_storage.backend.storage.NextCloudStorage'}} TAGGIT_CASE_INSENSITIVE = True TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/projects/weblivion/.venv/lib/python3.13/site-packages/django/forms/templates', 'templates', '/projects/weblivion/apps/app-server/app_server/blacklava/templates', '/projects/weblivion/apps/app-server/app_server/core/templates', '/projects/weblivion/apps/app-server/app_server/catalog/templates', '/projects/weblivion/apps/app-server/app_server/search/templates', '/projects/weblivion/apps/app-server/app_server/useraccount/templates'], 'OPTIONS': {'debug': True, 'loaders': ['dbtemplates.loader.Loader', 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'], 'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'wagtail.contrib.settings.context_processors.settings', 'django_react_templatetags.context_processors.react_context_processor', 'wagtailmenus.context_processors.wagtailmenus', 'pipit.context_processors.settings_context_processor', 'blacklabel.context_processors.default_iconset', 'customuser.context_processors.messages', 'down2learn.context_processors.partner', 'blacklava.context_processors.crispy_form_tags']}}] TEMP_DIR = '/mnt/ramdisk' TEST_NON_SERIALIZED_APPS = [] TEST_RUNNER = 'django.test.runner.DiscoverRunner' THOUSAND_SEPARATOR = ',' TIME_FORMAT = 'P' TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_S3 = '' USE_THOUSAND_SEPARATOR = False USE_TZ = True USE_X_FORWARDED_HOST = True USE_X_FORWARDED_PORT = False VS_CODE_REMOTE_DEBUG = False WAGTAILADMIN_BASE_URL = 'https://dev.weblivion.com' WAGTAILDOCS_DOCUMENT_MODEL = 'customdocument.CustomDocument' WAGTAILIMAGES_AVIF_QUALITY = 50 WAGTAILIMAGES_EXTENSIONS = ['gif', 'jpg', 'jpeg', 'png', 'webp', 'svg'] WAGTAILIMAGES_FORMAT_CONVERSIONS = {'jpg': 'webp', 'jpeg': 'webp', 'png': 'webp', 'webp': 'webp', 'avif': 'avif'} WAGTAILIMAGES_IMAGE_MODEL = 'customimage.CustomImage' WAGTAILIMAGES_JPEG_QUALITY = 50 WAGTAILIMAGES_MAX_UPLOAD_SIZE = 20971520 WAGTAILIMAGES_WEBP_QUALITY = 50 WAGTAILMEDIA = {'MEDIA_MODEL': 'custommedia.CustomMedia', 'MEDIA_FORM_BASE': '', 'AUDIO_EXTENSIONS': ['aac', 'aiff', 'flac', 'm4a', 'm4b', 'mp3', 'ogg', 'wav'], 'VIDEO_EXTENSIONS': ['avi', 'h264', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'ogv', 'webm']} WAGTAILMENUS_MAIN_MENU_ITEMS_RELATED_NAME = 'custom_menu_items' WAGTAILSEARCH_BACKENDS = {'default': {'BACKEND': 'wagtail.search.backends.database'}} WAGTAIL_ALLOW_UNICODE_SLUGS = False WAGTAIL_BUNDLE = 'wagtail-bundle' WAGTAIL_FRONTEND_LOGIN_URL = '/portal/auth/signin' WAGTAIL_HEADLESS_PREVIEW = {'LIVE_PREVIEW': True, 'CLIENT_URLS': {'default': '/api/preview/'}} WAGTAIL_SITE_NAME = 'Blacklava' WEBPACK_LOADER = {'DEFAULT': {}, 'app-server-bundle': {'BUNDLE_DIR_NAME': 'app-server-bundle', 'CACHE': True, 'STATS_FILE': '/projects/weblivion/dist/apps/app-server-bundle/webpack-stats.json', 'POLL_INTERVAL': 1, 'IGNORE': ['.+\\.hot-update.js', '.+\\.map']}, 'wagtail-bundle': {'BUNDLE_DIR_NAME': 'wagtail-bundle', 'CACHE': True, 'STATS_FILE': '/projects/weblivion/dist/libs/wagtail-bundle/webpack-stats.json', 'POLL_INTERVAL': 1, 'IGNORE': ['.+\\.hot-update.js', '.+\\.map']}} WSGI_APPLICATION = 'wsgi.application' X_FRAME_OPTIONS = 'SAMEORIGIN' YEAR_MONTH_FORMAT = 'F Y' You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.