|
|
@ -1,7 +1,7 @@ |
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
from __future__ import unicode_literals |
|
|
|
|
|
|
|
from datetime import datetime |
|
|
|
from datetime import datetime, timedelta |
|
|
|
import re |
|
|
|
|
|
|
|
from django.conf import settings |
|
|
@ -9,6 +9,7 @@ from django.core.exceptions import ObjectDoesNotExist |
|
|
|
from django.core.mail import EmailMessage |
|
|
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger |
|
|
|
from django.db.models import Q, Count |
|
|
|
from django.db.models.functions import Coalesce |
|
|
|
from django.http import HttpResponse, Http404 |
|
|
|
from django.shortcuts import get_object_or_404, render, redirect |
|
|
|
from django.urls import reverse |
|
|
@ -23,14 +24,24 @@ from . import forms |
|
|
|
|
|
|
|
ITEMS_PER_PAGE = 30 |
|
|
|
|
|
|
|
def get_events(base): |
|
|
|
now = datetime.now() - timedelta(hours=24) |
|
|
|
now = datetime.now().date() |
|
|
|
upcoming_events = base.filter(datestart__gte=now).order_by('datestart')[:12] |
|
|
|
ongoing_events = base.filter(datestart__lt=now, dateend__gte=now)[:12] |
|
|
|
past_events = base.filter(Q(dateend__lt=now) | Q(dateend=None, datestart__lt=now)) |
|
|
|
#past_events.annotate(datesort=Coalesce('dateend', 'datestart')).order_by('-datesort')[:12] |
|
|
|
past_events = past_events.order_by('-datestart')[:12] |
|
|
|
#past_events = list(past_events) |
|
|
|
#past_events.sort(key=lambda event: event.dateend if event.dateend else event.datestart, reverse=True) |
|
|
|
return upcoming_events, ongoing_events, past_events |
|
|
|
|
|
|
|
|
|
|
|
def index(request): |
|
|
|
now = datetime.now() |
|
|
|
display_events = ['news', 'events'] |
|
|
|
base = Content.objects.filter(type__name__in=display_events).order_by('-datestart') |
|
|
|
base = base.filter(published=True) |
|
|
|
upcoming_events = base.filter(datestart__gte=now)[:12] |
|
|
|
ongoing_events = base.filter(datestart__lt=now, dateend__gte=now)[:12] |
|
|
|
past_events = base.filter(Q(dateend__lt=now) | Q(dateend=None, datestart__lt=now))[:12] |
|
|
|
upcoming_events, ongoing_events, past_events = get_events(base) |
|
|
|
|
|
|
|
homepage = Content.objects.filter(type__name='homepage').order_by('-datestart')[:1] |
|
|
|
context = { |
|
|
@ -73,7 +84,7 @@ def section_index(request, section, max_length=10): |
|
|
|
def content_years(content): |
|
|
|
years = [ |
|
|
|
year['year'].year |
|
|
|
for year in content.annotate(year=TruncYear('datestart')).values('year').annotate(count=Count('shortname')).order_by('-year') |
|
|
|
for year in content.exclude(datestart=None).annotate(year=TruncYear('datestart')).values('year').annotate(count=Count('shortname')).order_by('-year') |
|
|
|
] |
|
|
|
return years |
|
|
|
|
|
|
@ -81,9 +92,10 @@ def filter_by_years(content, year): |
|
|
|
years = content_years(content) |
|
|
|
if year.isdigit(): |
|
|
|
year = int(year) |
|
|
|
else: |
|
|
|
elif years: |
|
|
|
year = years[0] |
|
|
|
content = content.filter(datestart__gte='%s-01-01' % year, datestart__lt='%s-01-01' % (year+1)) |
|
|
|
if year: |
|
|
|
content = content.filter(datestart__gte='%04d-01-01' % year, datestart__lt='%04d-01-01' % (year+1)) |
|
|
|
return { |
|
|
|
'content': content, |
|
|
|
'year': year, |
|
|
@ -124,7 +136,6 @@ def section_list(request, section): |
|
|
|
return render(request, 'results.html', context) |
|
|
|
|
|
|
|
def event(request): |
|
|
|
now = datetime.now() |
|
|
|
display_events = ['events', 'news'] |
|
|
|
featured = Content.objects.filter(type__name='events', featured=True).order_by('-datestart')[:1] |
|
|
|
base = Content.objects.filter(type__name__in=display_events).order_by('-datestart') |
|
|
@ -132,9 +143,7 @@ def event(request): |
|
|
|
if featured: |
|
|
|
base = base.exclude(pk=featured[0].pk) |
|
|
|
|
|
|
|
upcoming_events = base.filter(datestart__gt=now).order_by('-datestart') |
|
|
|
ongoing_events = base.filter(datestart__lt=now, dateend__gte=now).order_by('-datestart') |
|
|
|
past_events = base.filter(Q(dateend__lt=now) | Q(dateend=None, datestart__lt=now)).order_by('-datestart')[:10] |
|
|
|
upcoming_events, ongoing_events, past_events = get_events(base) |
|
|
|
|
|
|
|
context = { |
|
|
|
'upcoming_events': upcoming_events, |
|
|
|