camp/content/views.py

181 lines
6.5 KiB
Python
Raw Normal View History

2017-05-20 12:45:26 +00:00
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
2017-12-18 12:54:04 +00:00
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist
2017-07-03 08:14:07 +00:00
from django.db.models import Q
2017-12-18 14:17:06 +00:00
from django.http import HttpResponse, Http404
2017-12-18 12:54:04 +00:00
from django.shortcuts import get_object_or_404, render, redirect
from django.urls import reverse
2017-07-03 08:14:07 +00:00
from django.views.generic.list import ListView
2017-12-19 09:40:14 +00:00
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
2017-12-18 12:54:04 +00:00
2017-07-03 08:14:07 +00:00
from photologue.views import GalleryListView
from photologue.models import Photo, Gallery
2017-12-18 12:54:04 +00:00
from .models import Content, ContentContent
2017-05-20 12:45:26 +00:00
# Create your views here.
2017-06-10 09:59:00 +00:00
def index(request):
2017-12-18 12:54:04 +00:00
now = datetime.now()
display_events = ['news', 'events']
2017-12-18 14:17:06 +00:00
base = Content.objects.filter(type__name__in=display_events).order_by('-datestart')
base = base.filter(published=True)
upcoming_events = base.filter(datestart__gt=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]
2017-12-18 12:54:04 +00:00
homepage = Content.objects.filter(type__name='homepage').order_by('-datestart')[:1]
context = {
'upcoming_events': upcoming_events,
'ongoing_events': ongoing_events,
'past_events': past_events,
'homepage': homepage}
2017-06-10 09:59:00 +00:00
return render(request, 'index.html', context)
2017-07-03 08:14:07 +00:00
2017-12-18 14:17:06 +00:00
def section_index(request, types, section):
featured = Content.objects.filter(type__name__in=types, featured=True).order_by('-datestart')[:1]
content = Content.objects.filter(type__name__in=types).order_by('-datestart')
if featured:
content = content.exclude(pk=featured[0].pk)
content = content.filter(published=True)
2017-12-18 12:54:04 +00:00
return render(request, 'section_index.html', {
2017-12-18 14:17:06 +00:00
'section': section,
2017-12-18 12:54:04 +00:00
'featured': featured,
'content': content
})
2017-08-03 17:44:00 +00:00
def event(request):
2017-12-18 12:54:04 +00:00
now = datetime.now()
display_events = ['events']
featured = Content.objects.filter(type__name='events', featured=True).order_by('-datestart')[:1]
2017-12-18 14:17:06 +00:00
base = Content.objects.filter(type__name__in=display_events).order_by('-datestart')
base = base.filter(published=True)
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))[:10]
2017-12-18 12:54:04 +00:00
context = {
'upcoming_events': upcoming_events,
'ongoing_events': ongoing_events,
'past_events': past_events,
'featured': featured,
}
2017-08-03 17:44:00 +00:00
return render(request, 'event.html', context)
2017-12-18 14:37:32 +00:00
def events(request, shortname=None):
2017-12-18 12:54:04 +00:00
if not shortname:
return event(request)
events = get_object_or_404(Content, shortname=shortname, type__name__in=['news', 'events'])
2017-12-18 14:39:24 +00:00
if not events.published and not request.user.is_staff:
2017-12-18 14:17:06 +00:00
raise Http404
2017-08-03 17:44:00 +00:00
gallery = get_or_none(Gallery, slug=shortname)
2017-12-18 13:44:11 +00:00
latest_content_list = Content.objects.filter(type__name='events').order_by('-datestart')[:10]
2017-08-03 17:44:00 +00:00
return render(request, 'events.html', {'events': events, 'latest_content_list': latest_content_list, 'gallery': gallery})
2017-07-03 08:14:07 +00:00
2017-12-18 14:17:06 +00:00
def projects(request, shortname=None):
2017-12-18 12:54:04 +00:00
if not shortname:
2017-12-18 14:17:06 +00:00
return section_index(request, ['projects'], 'Projects')
2017-12-18 12:54:04 +00:00
projects = get_object_or_404(Content, shortname=shortname, type__name='projects')
2017-12-18 14:39:24 +00:00
if not projects.published and not request.user.is_staff:
2017-12-18 14:17:06 +00:00
raise Http404
2017-08-03 17:44:00 +00:00
gallery = get_or_none(Gallery, slug=shortname)
2017-12-18 13:44:11 +00:00
latest_content_list = Content.objects.filter(type__name='projects').order_by('-datestart')
2017-12-19 11:41:34 +00:00
return render(request, 'projects.html', {
'projects': projects,
'latest_content_list': latest_content_list,
'gallery': gallery
})
2017-08-03 17:44:00 +00:00
2017-12-18 14:37:32 +00:00
def works(request, shortname=None):
2017-12-18 12:54:04 +00:00
if not shortname:
2017-12-18 14:17:06 +00:00
return section_index(request, ['works'], 'Works')
2017-12-18 12:54:04 +00:00
works = get_object_or_404(Content, shortname=shortname, type__name='works')
2017-12-18 14:39:24 +00:00
if not works.published and not request.user.is_staff:
2017-12-18 14:17:06 +00:00
raise Http404
2017-08-03 17:44:00 +00:00
gallery = get_or_none(Gallery, slug=shortname)
2017-12-18 12:54:04 +00:00
latest_content_list = Content.objects.filter(type__name='works')
2017-08-03 17:44:00 +00:00
return render(request, 'works.html', {'works': works, 'latest_content_list': latest_content_list, 'gallery':gallery})
2017-12-18 14:37:32 +00:00
def texts(request, shortname=None):
2017-12-18 12:54:04 +00:00
if not shortname:
2017-12-18 14:17:06 +00:00
return section_index(request, ['texts'], 'Texts')
2017-12-18 13:44:11 +00:00
texts = get_object_or_404(Content, shortname=shortname, type__name='texts')
2017-08-03 17:44:00 +00:00
gallery = get_or_none(Gallery, slug=shortname)
2017-12-18 12:54:04 +00:00
latest_content_list = Content.objects.filter(type__name='texts')
return render(request, 'texts.html', {
'texts': texts,
'latest_content_list': latest_content_list,
2017-12-19 09:59:37 +00:00
'gallery': gallery
2017-12-18 12:54:04 +00:00
})
def page(request, shortname):
content = get_object_or_404(Content, shortname=shortname, type__name='page')
2017-12-18 14:39:24 +00:00
if not content.published and not request.user.is_staff:
2017-12-18 14:17:06 +00:00
raise Http404
2017-12-18 12:54:04 +00:00
return render(request, 'page.html', {'content': content})
def search(request):
q = request.GET.get('q')
2017-12-19 12:26:04 +00:00
results = Content.objects.filter(Q(body__icontains=q) | Q(title__icontains=q)).distinct()
results = results.filter(published=True)
results = results.order_by('-datestart')
2017-12-19 09:40:14 +00:00
page = request.GET.get('page', 1)
paginator = Paginator(results, 5)
try:
results = paginator.page(page)
except PageNotAnInteger:
results = paginator.page(1)
except EmptyPage:
results = paginator.page(paginator.num_pages)
2017-12-19 09:59:37 +00:00
return render(request, 'results.html', {
'results': results,
'query': q
})
2017-08-03 17:44:00 +00:00
2017-07-03 08:14:07 +00:00
class GalleryListViews(ListView):
queryset = Gallery.objects.on_site().is_public()
paginate_by = 20
template_name = 'gallery_list.html'
def get_or_none(classmodel, **kwargs):
try:
return classmodel.objects.get(**kwargs)
except classmodel.DoesNotExist:
return None
2017-12-18 12:54:04 +00:00
def redirect_index(request):
segment = request.GET.get('show')
if segment == 'pastevents':
return redirect(reverse('works'))
elif segment == 'contact':
return redirect(reverse('contact'))
return redirect(reverse('index'))
def redirect_event(request):
shortname = request.GET.get('this')
if shortname:
2017-12-18 14:17:06 +00:00
content = get_object_or_404(Content, shortname=shortname)
return redirect(content.get_absolute_url())
2017-12-18 12:54:04 +00:00
id = request.GET.get('id')
if id:
content = get_object_or_404(Content, id=id)
2017-12-18 14:17:06 +00:00
return redirect(content.get_absolute_url())
2017-12-18 12:54:04 +00:00
return redirect(reverse('events'))
def redirect_images(request, image):
return redirect(image)
2017-07-03 08:14:07 +00:00