Files @ 956f8c6fdaad
Branch filter:

Location: website/conservancy/events/views.py

bsturmfels
podjango: Add "Podcast" model to support multiple podcasts

Each Cast (episode) can belong to one or more Podcast, allowing episodes to be
shared between podcasts. This enables us introductory episodes to be delivered
in their own feed, but also included in the main "The Corresponding Source"
feed.

This required adding an additional `podcast_slug` argument to most views. The
date archive views were dropped because they're not linked to from anywhere.

Added a `podcasts` view as an index of all available Podcasts.
# from django.views.generic.list_detail import object_list
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404, HttpResponse
from django.shortcuts import render
from django.template import loader

from .models import Event


def event_detail(request, year, slug, queryset, **kwargs):
    """This view shows event detail.

    Nothing special, but it is necessary because
    django.views.generic.date_based.object_detail only works with
    slugs that are unique and specified by day, but we make slugs
    unique by year.
    """

    try:
        event = queryset.get(date__year=year, slug__exact=slug)
    except ObjectDoesNotExist:
        raise Http404("Event does not exist")
    return render(request, 'events/event_detail.html', {'event': event})

def custom_index(request, queryset, *args, **kwargs):
    """Scrollable index of future and past events, with date index.
    """

    future_events = None
    if "page" not in request.GET:
        future_events = Event.future.all().order_by("date")

    date_list = queryset.dates(kwargs['date_field'], 'year')

    kwargs = dict(kwargs, extra_context={'date_list': date_list,
                                         'future_events': future_events})
    del kwargs['date_field']
    del kwargs['allow_future']

    # return object_list(request, queryset, *args, **kwargs)
    return HttpResponse("FIXME: events must be updated like blog and news.")

def future_event_ics(request, queryset, *args, **kwargs):
    """ICS calendar view of future events

    This view just renders information into a template that looks like
    an ics file.  If in the future we want a 'real' implementation of
    this function, there is a python 'vobject' library that can be
    used.  Search google for details, or see
    http://www.technobabble.dk/2008/mar/06/exposing-calendar-events-using-icalendar-django/
    Hopefully at some point this functionality is integrated into
    django.contrib.
    """

    future_events = Event.future.all().order_by("date")

    return HttpResponse(loader.render_to_string('events/calendar.ics',
                                                {'events': future_events}),
                        mimetype='text/calendar')