Skip to content
Snippets Groups Projects
Commit 7f505ce0 authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

moved to class based generic views

parent 7a172c49
Branches
No related tags found
No related merge requests found
from django.conf import settings from django.conf import settings
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from django.db.models import Q
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from views import current_show, day_schedule, recommendations, show_list, show_detail, timeslot_detail, week_schedule, styles, host_list, host_detail from views import ShowListView, CurrentShowBoxView, RecommendationsListView, RecommendationsBoxView, DayScheduleView, StylesView, WeekScheduleView
from models import Host, Show, TimeSlot
import os import os
from datetime import date, datetime, timedelta
PROGRAM_SITE_MEDIA = os.path.join(os.path.dirname(__file__), '../site_media') PROGRAM_SITE_MEDIA = os.path.join(os.path.dirname(__file__), '../site_media')
recommendations_dict = {'template_name': 'boxes/recommendations.html'} now = datetime.now()
end = now + timedelta(weeks=1)
urlpatterns = patterns('', hosts = Host.objects.filter(Q(shows__programslots__until__gte=date.today()) |
url(r'^today/?$', day_schedule), Q(always_visible=True)).distinct()
url(r'^week/?$', week_schedule), shows = Show.objects.filter(programslots__until__gt=date.today()).exclude(id=1).distinct()
url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/?$', day_schedule), timeslots = TimeSlot.objects.all()
url(r'^(?P<year>\d{4})/(?P<week>\d{1,2})/?$', week_schedule), recommendations = TimeSlot.objects.filter(Q(note__isnull=False, note__status=1, start__range=(now, end)) |
url(r'^current_box/?$', cache_page(60)(current_show)), Q(show__broadcastformat__slug='sondersendung', start__range=(now, end))).order_by('start')[:20]
url(r'^hosts/?$', host_list),
url(r'^hosts/(?P<object_id>\d+)/?$', host_detail, name='host-detail'),
url(r'^tips/?$', recommendations),
url(r'^tips_box/?$', recommendations, recommendations_dict),
url(r'^shows/?$', show_list),
url(r'^shows/(?P<slug>[\w-]+)/?$', show_detail, name='show-detail'),
url(r'^(?P<object_id>\d+)/?$', timeslot_detail, name='timeslot-detail'),
url(r'^styles.css$', styles))
urlpatterns = patterns('',
url(r'^today/?$', DayScheduleView.as_view()),
url(r'^week/?$', WeekScheduleView.as_view()),
url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/?$', DayScheduleView.as_view()),
url(r'^(?P<year>\d{4})/(?P<week>\d{1,2})/?$', WeekScheduleView.as_view()),
url(r'^current_box/?$', cache_page(60)(CurrentShowBoxView.as_view())),
url(r'^hosts/?$', ListView.as_view(context_object_name='host_list', queryset=hosts, template_name='host_list.html')),
url(r'^hosts/(?P<pk>\d+)/?$', DetailView.as_view(context_object_name='host', queryset=hosts, template_name='host_detail.html'), name='host-detail'),
url(r'^tips/?$', RecommendationsListView.as_view()),
url(r'^tips_box/?$', RecommendationsBoxView.as_view()),
url(r'^shows/?$', ShowListView.as_view(context_object_name='show_list', queryset=shows, template_name='show_list.html')),
url(r'^shows/(?P<slug>[\w-]+)/?$', DetailView.as_view(queryset=shows, template_name='show_detail.html'), name='show-detail'),
url(r'^(?P<pk>\d+)/?$', DetailView.as_view(queryset=timeslots, template_name='timeslot_detail.html'), name='timeslot-detail'),
url(r'^styles.css$', StylesView.as_view())
)
if settings.DEBUG: if settings.DEBUG:
urlpatterns += patterns('', urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': PROGRAM_SITE_MEDIA})) url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': PROGRAM_SITE_MEDIA}))
from datetime import date, datetime, time, timedelta
import json import json
from datetime import date, datetime, time, timedelta
from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from django.shortcuts import get_object_or_404
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.views.generic.base import TemplateView
from django.views.generic.list import ListView
from models import BroadcastFormat, MusicFocus, Note, Show, ShowInformation, ShowTopic, TimeSlot, Host from models import BroadcastFormat, MusicFocus, Note, Show, ShowInformation, ShowTopic, TimeSlot
from program.utils import tofirstdayinisoweek
def host_list(request):
queryset = Host.objects.filter(Q(shows__programslots__until__gte=date.today()) |
Q(always_visible=True)).distinct()
return ListView.as_view(request, queryset=queryset, template_name='host_list.html')
def host_detail(request):
queryset = Host.objects.filter(Q(shows__programslots__until__gte=date.today()) |
Q(always_visible=True)).distinct()
return DetailView.as_view(request, queryset=queryset, template_name='host_detail.html')
def show_list(request):
queryset = Show.objects.filter(programslots__until__gt=date.today()).exclude(id=1).distinct()
if 'broadcastformat' in request.GET:
broadcastformat = get_object_or_404(BroadcastFormat, slug=request.GET['broadcastformat'])
queryset = queryset.filter(broadcastformat=broadcastformat)
elif 'musicfocus' in request.GET:
musicfocus = get_object_or_404(MusicFocus, slug=request.GET['musicfocus'])
queryset = queryset.filter(musicfocus=musicfocus)
elif 'showinformation' in request.GET:
showinformation = get_object_or_404(ShowInformation, slug=request.GET['showinformation'])
queryset = queryset.filter(showinformation=showinformation)
elif 'showtopic' in request.GET:
showtopic = get_object_or_404(ShowTopic, slug=request.GET['showtopic'])
queryset = queryset.filter(showtopic=showtopic)
return ListView.as_view(request, queryset=queryset, template_object_name='show', template_name='show_list.html')
def show_detail(request):
queryset = Show.objects.filter(programslots__until__gt=date.today()).exclude(id=1).distinct()
return DetailView.as_view(request, queryset=queryset, template_name='show_detail.html',) class ShowListView(ListView):
def get_queryset(self):
queryset = Show.objects.filter(programslots__until__gt=date.today()).exclude(id=1).distinct()
if 'broadcastformat' in self.request.GET:
broadcastformat = get_object_or_404(BroadcastFormat, slug=self.request.GET['broadcastformat'])
queryset = queryset.filter(broadcastformat=broadcastformat)
elif 'musicfocus' in self.request.GET:
musicfocus = get_object_or_404(MusicFocus, slug=self.request.GET['musicfocus'])
queryset = queryset.filter(musicfocus=musicfocus)
elif 'showinformation' in self.request.GET:
showinformation = get_object_or_404(ShowInformation, slug=self.request.GET['showinformation'])
queryset = queryset.filter(showinformation=showinformation)
elif 'showtopic' in self.request.GET:
showtopic = get_object_or_404(ShowTopic, slug=self.request.GET['showtopic'])
queryset = queryset.filter(showtopic=showtopic)
def timeslot_detail(request): return queryset
queryset = TimeSlot.objects.all()
return DetailView.as_view(request, queryset=queryset, template_name='timeslot_detail.html')
class RecommendationsListView(ListView):
context_object_name = 'recommendation_list'
template_name = 'recommendation_list.html'
def recommendations(request, template_name='recommendations.html'):
now = datetime.now() now = datetime.now()
end = now + timedelta(weeks=1) end = now + timedelta(weeks=1)
queryset = TimeSlot.objects.filter(Q(note__isnull=False, note__status=1, start__range=(now, end)) | queryset = TimeSlot.objects.filter(Q(note__isnull=False, note__status=1, start__range=(now, end)) |
Q(show__broadcastformat__slug='sondersendung', start__range=(now, end))).order_by('start')[:20] Q(show__broadcastformat__slug='sondersendung', start__range=(now, end))).order_by('start')[:20]
return DetailView.as_view(request, queryset=queryset, template_name=template_name, template_object_name='recommendation')
def day_schedule(request, year=None, month=None, day=None):
if year is None and month is None and day is None:
today = datetime.combine(date.today(), time(6, 0))
else:
today = datetime.strptime('%s__%s__%s__06__00' % (year, month, day), '%Y__%m__%d__%H__%M')
tomorrow = today + timedelta(days=1) class RecommendationsBoxView(RecommendationsListView):
template_name='boxes/recommendation.html'
recommendations = Note.objects.filter(status=1, timeslot__start__range=(today, tomorrow))
default_show = Show.objects.get(pk=1)
extra_context = dict(day=today, recommendations=recommendations, default_show=default_show)
timeslots = TimeSlot.objects.get_day_timeslots(today)
if 'broadcastformat' in request.GET:
broadcastformat = get_object_or_404(BroadcastFormat, slug=request.GET['broadcastformat'])
extra_context['timeslots'] = timeslots.filter(show__broadcastformat=broadcastformat)
elif 'musicfocus' in request.GET:
musicfocus = get_object_or_404(MusicFocus, slug=request.GET['musicfocus'])
extra_context['timeslots'] = timeslots.filter(show__musicfocus=musicfocus)
elif 'showinformation' in request.GET:
showinformation = get_object_or_404(ShowInformation, slug=request.GET['showinformation'])
extra_context['timeslots'] = timeslots.filter(show__showinformation=showinformation)
elif 'showtopic' in request.GET:
showtopic = get_object_or_404(ShowTopic, slug=request.GET['showtopic'])
extra_context['showtopic'] = timeslots.filter(show__showtopic=showtopic)
else:
extra_context['timeslots'] = timeslots
return TemplateView.as_view(request, extra_context=extra_context, template='day_schedule.html') class DayScheduleView(TemplateView):
template_name = 'day_schedule.html'
def get_context_data(self, **kwargs):
year = self.kwargs.get('year', None)
month = self.kwargs.get('month', None)
day = self.kwargs.get('day', None)
def current_show(request): if year is None and month is None and day is None:
current = TimeSlot.objects.get_or_create_current() today = datetime.combine(date.today(), time(6, 0))
previous = current.get_previous_by_start() else:
next = current.get_next_by_start() today = datetime.strptime('%s__%s__%s__06__00' % (year, month, day), '%Y__%m__%d__%H__%M')
after_next = next.get_next_by_start()
tomorrow = today + timedelta(days=1)
extra_context = dict(current=current, previous=previous, next=next, after_next=after_next)
context = super(DayScheduleView, self).get_context_data(**kwargs)
return TemplateView.as_view(request, template='boxes/current.html', extra_context=extra_context) context['day'] = today
context['recommendations'] = Note.objects.filter(status=1, timeslot__start__range=(today, tomorrow))
context['default_show'] = Show.objects.get(pk=1)
timeslots = TimeSlot.objects.get_day_timeslots(today)
if 'broadcastformat' in self.request.GET:
broadcastformat = get_object_or_404(BroadcastFormat, slug=self.request.GET['broadcastformat'])
context['timeslots'] = timeslots.filter(show__broadcastformat=broadcastformat)
elif 'musicfocus' in self.request.GET:
musicfocus = get_object_or_404(MusicFocus, slug=self.request.GET['musicfocus'])
context['timeslots'] = timeslots.filter(show__musicfocus=musicfocus)
elif 'showinformation' in self.request.GET:
showinformation = get_object_or_404(ShowInformation, slug=self.request.GET['showinformation'])
context['timeslots'] = timeslots.filter(show__showinformation=showinformation)
elif 'showtopic' in self.request.GET:
showtopic = get_object_or_404(ShowTopic, slug=self.request.GET['showtopic'])
context['showtopic'] = timeslots.filter(show__showtopic=showtopic)
else:
context['timeslots'] = timeslots
return context
class CurrentShowBoxView(TemplateView):
context_object_name = 'recommendation_list'
template_name = 'boxes/current.html'
def get_context_data(self, **kwargs):
current_timeslot = TimeSlot.objects.get_or_create_current()
previuos_timeslot = current_timeslot.get_previous_by_start()
next_timeslot = current_timeslot.get_next_by_start()
after_next_timeslot = next_timeslot.get_next_by_start()
context = super(CurrentShowBoxView, self).get_context_data(**kwargs)
context['current_timeslot'] = current_timeslot
context['previuos_timeslot'] = previuos_timeslot
context['next_timeslot'] = next_timeslot
context['after_next_timeslot'] = after_next_timeslot
return context
class WeekScheduleView(TemplateView):
template_name = 'week_schedule.html'
def get_context_data(self, **kwargs):
year = self.kwargs.get('year', None)
week = self.kwargs.get('week', None)
if year is None and week is None:
year, week = datetime.now().strftime('%G__%V').split('__')
monday = tofirstdayinisoweek(int(year), int(week))
tuesday = monday + timedelta(days=1)
wednesday = monday + timedelta(days=2)
thursday = monday + timedelta(days=3)
friday = monday + timedelta(days=4)
saturday = monday + timedelta(days=5)
sunday = monday + timedelta(days=6)
context = super(WeekScheduleView, self).get_context_data()
context['monday'] = monday
context['tuesday'] = tuesday
context['wednesday'] = wednesday
context['thursday'] = thursday
context['friday'] = friday
context['saturday'] = saturday
context['sunday'] = sunday
context['default_show'] = Show.objects.get(pk=1)
context['monday_timeslots'] = TimeSlot.objects.get_day_timeslots(monday)
context['tuesday_timeslots'] = TimeSlot.objects.get_day_timeslots(tuesday)
context['wednesday_timeslots'] = TimeSlot.objects.get_day_timeslots(wednesday)
context['thursday_timeslots'] = TimeSlot.objects.get_day_timeslots(thursday)
context['friday_timeslots'] = TimeSlot.objects.get_day_timeslots(friday)
context['saturday_timeslots'] = TimeSlot.objects.get_day_timeslots(saturday)
context['sunday_timeslots'] = TimeSlot.objects.get_day_timeslots(sunday)
context['last_w'] = datetime.strftime(monday - timedelta(days=7), '%G/%V')
context['cur_w'] = datetime.strftime(monday, '%G/%V')
context['next_w1'] = datetime.strftime(monday + timedelta(days=7), '%G/%V')
context['next_w2'] = datetime.strftime(monday + timedelta(days=14), '%G/%V')
context['next_w3'] = datetime.strftime(monday + timedelta(days=21), '%G/%V')
context['next_w4'] = datetime.strftime(monday + timedelta(days=28), '%G/%V')
return context
def week_schedule(request, year=None, week=None): def week_schedule(request, year=None, week=None):
if year is None and week is None: if year is None and week is None:
...@@ -143,17 +177,21 @@ def week_schedule(request, year=None, week=None): ...@@ -143,17 +177,21 @@ def week_schedule(request, year=None, week=None):
extra_context['next_w3'] = datetime.strftime(monday + timedelta(days=21), '%G/%V') extra_context['next_w3'] = datetime.strftime(monday + timedelta(days=21), '%G/%V')
extra_context['next_w4'] = datetime.strftime(monday + timedelta(days=28), '%G/%V') extra_context['next_w4'] = datetime.strftime(monday + timedelta(days=28), '%G/%V')
return TemplateView.as_view(request, template='week_schedule.html', extra_context=extra_context) return TemplateView.as_view(template='week_schedule.html', extra_context=extra_context)(request)
def styles(request): class StylesView(TemplateView):
extra_context = dict() template_name = 'styles.css'
extra_context['broadcastformats'] = BroadcastFormat.objects.filter(enabled=True) content_type = 'text/css'
extra_context['musicfocus'] = MusicFocus.objects.all()
extra_context['showinformation'] = ShowInformation.objects.all()
extra_context['showtopic'] = ShowTopic.objects.all()
return TemplateView.as_view(request, template='styles.css', mimetype='text/css', extra_context=extra_context) def get_context_data(self, **kwargs):
context = super(StylesView, self).get_context_data(**kwargs)
context['broadcastformats'] = BroadcastFormat.objects.filter(enabled=True)
context['musicfocus'] = MusicFocus.objects.all()
context['showinformation'] = ShowInformation.objects.all()
context['showtopic'] = ShowTopic.objects.all()
return context
def json_day_schedule(request, year=None, month=None, day=None): def json_day_schedule(request, year=None, month=None, day=None):
...@@ -173,11 +211,3 @@ def json_day_schedule(request, year=None, month=None, day=None): ...@@ -173,11 +211,3 @@ def json_day_schedule(request, year=None, month=None, day=None):
schedule.append((ts.start.strftime('%H:%M:%S'), ts.programslot.show.name, -1)) schedule.append((ts.start.strftime('%H:%M:%S'), ts.programslot.show.name, -1))
return HttpResponse(json.dumps(schedule, ensure_ascii=False, encoding='utf8').encode('utf8'), content_type="application/json; charset=utf-8") return HttpResponse(json.dumps(schedule, ensure_ascii=False, encoding='utf8').encode('utf8'), content_type="application/json; charset=utf-8")
def tofirstdayinisoweek(year, week):
# http://stackoverflow.com/questions/5882405/get-date-from-iso-week-number-in-python
ret = datetime.strptime('%04d-%02d-1' % (year, week), '%Y-%W-%w')
if date(year, 1, 4).isoweekday() > 4:
ret -= timedelta(days=7)
return ret
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment