From ebdbcf86461003d7201025c53ea812f85858f10e Mon Sep 17 00:00:00 2001 From: Merlin Buczek Date: Thu, 13 Jun 2019 16:53:54 +0200 Subject: [PATCH] Improve EventIndex --- mpicms/base/models.py | 18 +----- mpicms/events/mixins.py | 13 ++++ mpicms/events/models.py | 21 +++--- mpicms/events/templatetags/event_tags.py | 9 +++ .../templatetags/wagtail_events_tags.py | 64 ------------------- mpicms/templates/base/home_page.html | 7 +- .../events/components/event_list.html | 4 ++ mpicms/templates/events/event_index.html | 2 + 8 files changed, 45 insertions(+), 93 deletions(-) create mode 100644 mpicms/events/mixins.py create mode 100644 mpicms/events/templatetags/event_tags.py delete mode 100644 mpicms/events/templatetags/wagtail_events_tags.py diff --git a/mpicms/base/models.py b/mpicms/base/models.py index 327616c..3f9b417 100644 --- a/mpicms/base/models.py +++ b/mpicms/base/models.py @@ -15,7 +15,8 @@ from wagtail.snippets.models import register_snippet from mpicms.news.mixins import NewsMixin -from mpicms.events.models import Event, EventIndex +# from mpicms.events.models import Event, EventIndex +from mpicms.events.mixins import EventMixin Page.show_in_menus_default = True @@ -74,7 +75,7 @@ class Meta: # noqa abstract = True -class HomePage(NewsMixin, Page): +class HomePage(EventMixin, NewsMixin, Page): banner = models.ForeignKey( 'Banner', null=True, @@ -94,19 +95,6 @@ class HomePage(NewsMixin, Page): def categories(self): return self.get_children().type(CategoryPage).live() - def get_context(self, request, *args, **kwargs): - context = super().get_context(request, *args, **kwargs) - - # Events - events = [] - for event in Event.objects.live(): - events.append(event.get_dict(request)) - - context["events"] = json.dumps(events) - context['event_index'] = EventIndex.objects.get() - - return context - class Meta: # noqa verbose_name = _("homepage") verbose_name_plural = _("homepages") diff --git a/mpicms/events/mixins.py b/mpicms/events/mixins.py new file mode 100644 index 0000000..bddf70f --- /dev/null +++ b/mpicms/events/mixins.py @@ -0,0 +1,13 @@ +from django.db import models + +from .models import EventIndex + + +class EventMixin(models.Model): + + @property + def event_index(self): + return self.get_children().type(EventIndex).first() + + class Meta: # noqa + abstract = True diff --git a/mpicms/events/models.py b/mpicms/events/models.py index df47520..7f1b22e 100644 --- a/mpicms/events/models.py +++ b/mpicms/events/models.py @@ -47,7 +47,7 @@ def end(self): return datetime.combine(self.end_date, self.end_time) return self.end_date - def get_dict(self, request): + def get_dict(self, request=None): return { 'title': self.title, 'start': self.start.isoformat(), @@ -86,16 +86,15 @@ class EventIndex(Page): content_panels = Page.content_panels - def get_context(self, request, *args, **kwargs): - context = super().get_context(request, *args, **kwargs) - - events = [] - for child in self.get_children().type(Event).live().specific(): - events.append(child.get_dict(request)) - - context["events"] = json.dumps(events) - - return context + @property + def events(self): + if self.depth <= 3: + return Event.objects.live().specific() + return self.get_children().stype(Event).live().specific() + + def get_json_events(self, request=None): + event_dicts = [event.get_dict(request) for event in self.events] + return json.dumps(event_dicts) def clean(self): # Prevent more than one event index model = self.__class__ diff --git a/mpicms/events/templatetags/event_tags.py b/mpicms/events/templatetags/event_tags.py new file mode 100644 index 0000000..d7d0aac --- /dev/null +++ b/mpicms/events/templatetags/event_tags.py @@ -0,0 +1,9 @@ +from django import template + + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def get_json_events(context, event_index): + return event_index.get_json_events(request=context['request']) diff --git a/mpicms/events/templatetags/wagtail_events_tags.py b/mpicms/events/templatetags/wagtail_events_tags.py deleted file mode 100644 index b97668f..0000000 --- a/mpicms/events/templatetags/wagtail_events_tags.py +++ /dev/null @@ -1,64 +0,0 @@ -from urllib.parse import urlencode - -from django import template - - -register = template.Library() - - -@register.simple_tag(takes_context=True) -def querystring(context, *args, **kwargs): - """ - Display all GET values (except page) encoded as url params - - :param context: template context - :return: string|encoded params as urlstring - """ - try: - params = context['request'].GET.dict() - except (KeyError, AttributeError): - params = {} - else: - for value in args: - params.pop(value, None) - for key, value in kwargs.items(): - params[key] = value - return urlencode(params) - - -def _patch(context, key, data): - """ - Patch the GET value - - :param context: template context dict - :param key: item name - :param data: item value - :return: patched url params - """ - getvars = dict(context['request'].GET) - getvars[key] = [data] - return '?{0}'.format(urlencode(getvars, doseq=True)) - - -@register.simple_tag(takes_context=True) -def patch_scope(context, scope): - """ - Prepare scope for agenda - - :param context: - :param scope: - :return: - """ - return _patch(context, 'scope', scope) - - -@register.simple_tag(takes_context=True) -def patch_start_date(context, date): - """ - Prepare `start_date` url for agenda - - :param context: template context dict - :param date: start_date - :return: - """ - return _patch(context, 'start_date', date.strftime('%Y.%m.%d')) diff --git a/mpicms/templates/base/home_page.html b/mpicms/templates/base/home_page.html index 296848a..81741a3 100644 --- a/mpicms/templates/base/home_page.html +++ b/mpicms/templates/base/home_page.html @@ -22,18 +22,19 @@
{% include 'news/components/news_preview.html' with news=page.news %}
+ {% if page.event_index %}

{% trans 'Upcoming events' %}

- {% include 'events/components/event_list.html' %} + {% include 'events/components/event_list.html' with event_index=page.event_index %}
+ {% endif %}

{% trans 'Content' %}

{% include 'base/components/content_preview.html' with pages=page.categories %} - {% endblock %} \ No newline at end of file diff --git a/mpicms/templates/events/components/event_list.html b/mpicms/templates/events/components/event_list.html index 2224500..48a5a4c 100644 --- a/mpicms/templates/events/components/event_list.html +++ b/mpicms/templates/events/components/event_list.html @@ -1,5 +1,9 @@ +{% load event_tags %} +
+ +{% get_json_events event_index.specific as events %}