From 0ee502abec81312bf3cfde78d281627228ee3a5a Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 26 Mar 2020 09:50:58 +0100 Subject: [PATCH] Improve performance by not re-evaluating main context processors on every template rendering in a signal receiver --- .../base/migrations/0149_order_cancellation_date.py | 2 +- src/pretix/control/context.py | 9 ++++++++- src/pretix/presale/context.py | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/migrations/0149_order_cancellation_date.py b/src/pretix/base/migrations/0149_order_cancellation_date.py index b454705a89..363e79ddaa 100644 --- a/src/pretix/base/migrations/0149_order_cancellation_date.py +++ b/src/pretix/base/migrations/0149_order_cancellation_date.py @@ -1,7 +1,7 @@ # Generated by Django 3.0.4 on 2020-03-25 14:40 from django.db import migrations, models -from django.db.models import OuterRef, Count, Subquery, Q +from django.db.models import Count, OuterRef, Q, Subquery from django.utils.timezone import now diff --git a/src/pretix/control/context.py b/src/pretix/control/context.py index 6a48d7a940..1fc689e2e7 100644 --- a/src/pretix/control/context.py +++ b/src/pretix/control/context.py @@ -16,6 +16,7 @@ from pretix.control.navigation import ( from ..helpers.i18n import ( get_javascript_format, get_javascript_output_format, get_moment_locale, ) +from ..multidomain.urlreverse import get_event_domain from .signals import html_head, nav_topbar SessionStore = import_module(settings.SESSION_ENGINE).SessionStore @@ -25,6 +26,12 @@ def contextprocessor(request): """ Adds data to all template contexts """ + if not hasattr(request, '_pretix_control_default_context'): + request._pretix_control_default_context = _default_context(request) + return request._pretix_control_default_context + + +def _default_context(request): try: url = resolve(request.path_info) except Resolver404: @@ -51,7 +58,7 @@ def contextprocessor(request): if request.event.settings.get('payment_term_weekdays'): _js_payment_weekdays_disabled = '[0,6]' - ctx['has_domain'] = request.event.organizer.domains.exists() + ctx['has_domain'] = get_event_domain(request.event, fallback=True) is not None if not request.event.testmode: with scope(organizer=request.organizer): diff --git a/src/pretix/presale/context.py b/src/pretix/presale/context.py index 8abdcd0596..d409773609 100644 --- a/src/pretix/presale/context.py +++ b/src/pretix/presale/context.py @@ -21,6 +21,12 @@ def contextprocessor(request): """ Adds data to all template contexts """ + if not hasattr(request, '_pretix_presale_default_context'): + request._pretix_presale_default_context = _default_context(request) + return request._pretix_presale_default_context + + +def _default_context(request): if request.path.startswith('/control'): return {}