diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html index 36f59bdfda..37259a5bdb 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html @@ -9,21 +9,21 @@ {% endfor %}
-{% include "pretixpresale/fragment_calendar.html" with show_avail=event.settings.event_list_availability weeks=subevent_list.weeks %} +{% include "pretixpresale/fragment_calendar.html" with show_avail=event.settings.event_list_availability %} diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html index ee4cf16514..5e30d36b07 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html @@ -9,21 +9,21 @@ {% endfor %}
-{% include "pretixpresale/fragment_week_calendar.html" with show_avail=event.settings.event_list_availability days=subevent_list.days %} +{% include "pretixpresale/fragment_week_calendar.html" with show_avail=event.settings.event_list_availability %}
- - {{ subevent_list.before|date:subevent_list.week_format }} + {{ before|date:week_format }} - - {{ subevent_list.after|date:subevent_list.week_format }} + {{ after|date:week_format }}
diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html index 6c25419a14..7cfa42e89c 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html @@ -1,6 +1,6 @@ {% load i18n %} {% load eventurl %} -{% for subev in subevent_list.subevent_list %} +{% for subev in subevent_list %}
diff --git a/src/pretix/presale/templates/pretixpresale/event/index.html b/src/pretix/presale/templates/pretixpresale/event/index.html index 98dadf2974..59d684460e 100644 --- a/src/pretix/presale/templates/pretixpresale/event/index.html +++ b/src/pretix/presale/templates/pretixpresale/event/index.html @@ -2,7 +2,6 @@ {% load i18n %} {% load l10n %} {% load eventurl %} -{% load cache %} {% load money %} {% load thumb %} {% load eventsignal %} @@ -74,15 +73,13 @@
- {% cache 15 subevent_lits subevent_list_cache_key %} - {% if subevent_list.list_type == "calendar" %} - {% include "pretixpresale/event/fragment_subevent_calendar.html" %} - {% elif subevent_list.list_type == "week" %} - {% include "pretixpresale/event/fragment_subevent_calendar_week.html" %} - {% else %} - {% include "pretixpresale/event/fragment_subevent_list.html" %} - {% endif %} - {% endcache %} + {% if list_type == "calendar" %} + {% include "pretixpresale/event/fragment_subevent_calendar.html" %} + {% elif list_type == "week" %} + {% include "pretixpresale/event/fragment_subevent_calendar_week.html" %} + {% else %} + {% include "pretixpresale/event/fragment_subevent_list.html" %} + {% endif %}
diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index 14efb87788..5a7f3ef2b7 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -33,7 +33,6 @@ # License for the specific language governing permissions and limitations under the License. import calendar -import hashlib import sys from collections import defaultdict from datetime import date, datetime, timedelta @@ -51,7 +50,6 @@ from django.http import Http404, HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.utils.decorators import method_decorator from django.utils.formats import get_format -from django.utils.functional import SimpleLazyObject from django.utils.timezone import now from django.utils.translation import gettext_lazy as _, pgettext_lazy from django.views import View @@ -450,8 +448,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): context['frontpage_text'] = str(self.request.event.settings.frontpage_text) if self.request.event.has_subevents: - context['subevent_list'] = SimpleLazyObject(self._subevent_list_context) - context['subevent_list_cache_key'] = self._subevent_list_cachekey() + context.update(self._subevent_list_context()) context['show_cart'] = ( context['cart']['positions'] and ( @@ -468,17 +465,6 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): return context - def _subevent_list_cachekey(self): - cache_key_parts = [ - self.request.host, - str(self.request.event.pk), - self.request.get_full_path(), - self.request.LANGUAGE_CODE, - self.request.sales_channel.identifier, - ] - cache_key = f'pretix.presale.views.event.EventIndex.subevent_list_context:{hashlib.md5(":".join(cache_key_parts).encode()).hexdigest()}' - return cache_key - def _subevent_list_context(self): voucher = None if self.request.GET.get('voucher'): diff --git a/src/pretix/presale/views/organizer.py b/src/pretix/presale/views/organizer.py index 635c4c9799..beda847a47 100644 --- a/src/pretix/presale/views/organizer.py +++ b/src/pretix/presale/views/organizer.py @@ -33,7 +33,6 @@ # License for the specific language governing permissions and limitations under the License. import calendar -import hashlib from collections import defaultdict from datetime import date, datetime, time, timedelta from urllib.parse import quote @@ -41,7 +40,6 @@ from urllib.parse import quote import isoweek import pytz from django.conf import settings -from django.core.cache import cache from django.db.models import Exists, Max, Min, OuterRef, Q from django.db.models.functions import Coalesce, Greatest from django.http import Http404, HttpResponse @@ -308,64 +306,6 @@ class OrganizerIndex(OrganizerViewMixin, EventListMixin, ListView): template_name = 'pretixpresale/organizers/index.html' paginate_by = 30 - def dispatch(self, request, *args, **kwargs): - # In stock pretix, nothing on this page is session-dependent except for the language and the customer login part, - # so we can cache pretty aggressively if the user is anonymous. Note that we deliberately implement the caching - # on the view layer, *after* all middlewares have been ran, so we have access to the computed locale, as well - # as the login status etc. - cache_allowed = ( - not getattr(request, 'customer', None) and not request.user.is_authenticated - ) - cache_key_parts = [ - request.method, - request.host, - str(request.organizer.pk), - request.get_full_path(), - request.LANGUAGE_CODE, - self.request.sales_channel.identifier, - ] - for c, v in request.COOKIES.items(): - # If the cookie is not one we know, it might be set by a plugin and we need to include it in the - # cache key to be safe. A known example includes plugins that e.g. store cookie banner state. - if c not in (settings.SESSION_COOKIE_NAME, settings.LANGUAGE_COOKIE_NAME, settings.CSRF_COOKIE_NAME): - cache_key_parts.append(f'{c}={v}') - for c, v in request.session.items(): - # If the session key is not one we know, it might be set by a plugin and we need to include it in the - # cache key to be safe. A known example would be the pretix-campaigns plugin setting the campaign ID. - if ( - not c.startswith('_auth') and - not c.startswith('pretix_auth_') and - not c.startswith('customer_auth_') and - not c.startswith('current_cart_') and - not c.startswith('cart_') and - not c.startswith('payment_') and - c not in ('carts', 'payment', 'pinned_user_agent') - ): - cache_key_parts.append(f'{c}={repr(v)}') - - cache_key = f'pretix.presale.views.organizer.OrganizerIndex:{hashlib.md5(":".join(cache_key_parts).encode()).hexdigest()}' - cache_timeout = 15 - - if not cache_allowed: - return super().dispatch(request, *args, **kwargs) - - response = cache.get(cache_key) - if response is not None: - return response - - response = super().dispatch(request, *kwargs, **kwargs) - if response.status_code >= 400: - return response - - if hasattr(response, 'render') and callable(response.render): - def _store_to_cache(r): - cache.set(cache_key, r, cache_timeout) - - response.add_post_render_callback(_store_to_cache) - else: - cache.set(cache_key, response, cache_timeout) - return response - def get(self, request, *args, **kwargs): style = request.GET.get("style", request.organizer.settings.event_list_type) if style == "calendar":