def calendar(request): date_str = request.GET.get('date', None) today = int(date.today().strftime('%Y%m%d')) if date_str: if not re.match("^\d{4}(-\d{2})?(-\d{2})?$", date_str): return redirect('/calendar') date_int = str_to_date(date_str) else: date_int = today try: offset = int(request.GET.get('offset', 0)) except ValueError: return HttpResponseNotFound() PER_PAGE = 10 limit = PER_PAGE + 1 releases = list(ReleaseGroup.get_calendar(date_int, limit, offset)) if len(releases) == limit: if releases[0].date == releases[-1].date: next_date = date_to_str(date_int) next_offset = offset + PER_PAGE releases = releases[:-1] else: if offset: i = min(i for i in xrange(limit) if releases[i].date != releases[0].date) next_date = date_to_str(releases[i].date) next_offset = 0 releases = releases[:i] else: next_date = date_to_str(releases[-1].date) next_offset = 0 releases = [r for r in releases if r.date != releases[-1].date] else: next_date = None next_offset = 0 for i, release in enumerate(releases): if i > 0 and release.date == releases[i - 1].date: release.date_first = None else: release.date_first = release.date_str release.date_str = None return render(request, 'calendar.html', { 'releases': releases, 'next_date': next_date, 'next_offset': next_offset})
def date_str(self): return date_to_str(self.date)