archive per week
This commit is contained in:
parent
b0bbe1805b
commit
dd2ce36765
5 changed files with 89 additions and 6 deletions
|
|
@ -83,6 +83,16 @@ class Item(models.Model):
|
|||
)
|
||||
return week, archive
|
||||
|
||||
def get_week(self):
|
||||
return int(self.published.strftime('%W'))
|
||||
|
||||
def get_year(self):
|
||||
return int(self.published.strftime('%Y'))
|
||||
|
||||
def get_monday(self):
|
||||
d = '%s-W%s' % (self.get_year(), self.get_week())
|
||||
return datetime.strptime(d + '-1', "%Y-W%W-%w").strftime('%Y-%m-%d')
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('item', kwargs={'id': self.id})
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import json
|
|||
|
||||
from django.utils import timezone
|
||||
from django.utils.timezone import datetime, timedelta
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import render, redirect
|
||||
from django.db.models import Q
|
||||
from django.utils.html import mark_safe
|
||||
from django.conf import settings
|
||||
|
|
@ -23,6 +23,31 @@ def get_now():
|
|||
return timezone.make_aware(datetime.now(), timezone.get_default_timezone())
|
||||
|
||||
|
||||
def get_monday(date):
|
||||
d = date.strftime('%Y-W%W-1')
|
||||
return datetime.strptime(d, "%Y-W%W-%w").strftime('%Y-%m-%d')
|
||||
|
||||
|
||||
def format_week(week):
|
||||
a = datetime.strptime(week, '%Y-%m-%d')
|
||||
b = (a + timedelta(days=6))
|
||||
fmt = '%b %d'
|
||||
a = a.strftime(fmt)
|
||||
b = b.strftime(fmt)
|
||||
return '%s - %s' % (a, b)
|
||||
|
||||
|
||||
def get_weeks(archive):
|
||||
weeks = sorted(set(archive.values_list('year', 'week')))
|
||||
weeks = [datetime.strptime('%s-W%s-1' % w, "%Y-W%W-%w").strftime('%Y-%m-%d') for w in weeks]
|
||||
weeks = [{
|
||||
'date': week,
|
||||
'year': week.split('-')[0],
|
||||
'title': format_week(week)
|
||||
} for week in weeks]
|
||||
return weeks
|
||||
|
||||
|
||||
def index(request):
|
||||
context = default_context(request)
|
||||
now = request.GET.get("now")
|
||||
|
|
@ -36,7 +61,7 @@ def index(request):
|
|||
week, archive = models.Item.public(now)
|
||||
context['items'] = week
|
||||
if archive.exists():
|
||||
context['archive'] = '/_%s/' % get_now().year
|
||||
context['archive'] = '/_%s/' % get_monday(get_now() - timedelta(days=7))
|
||||
if now:
|
||||
context['now'] = now
|
||||
context['previous_week'] = (now - timedelta(days=7)).strftime(TS_FORMAT)
|
||||
|
|
@ -44,11 +69,26 @@ def index(request):
|
|||
return render(request, 'index.html', context)
|
||||
|
||||
|
||||
def archive(request, year=None, week=None):
|
||||
def archive(request, year=None, month=None, day=None, week=None):
|
||||
context = default_context(request)
|
||||
qs = models.Item.public()
|
||||
week, archive = models.Item.public()
|
||||
context['items'] = archive
|
||||
_, archive = models.Item.public()
|
||||
if year and month and day:
|
||||
date = datetime.strptime('%s-%s-%s' % (year, month, day), '%Y-%m-%d')
|
||||
week = int(date.strftime('%W'))
|
||||
year = int(year)
|
||||
archive_week = archive.filter(year=year, week=week).order_by('published')
|
||||
context['weeks'] = get_weeks(archive)
|
||||
context['this_week'] = date.strftime('%Y-%m-%d')
|
||||
context['this_year'] = date.strftime('%Y')
|
||||
elif week:
|
||||
week = int(week)
|
||||
year = int(year)
|
||||
week = datetime.strptime('%s-W%s-1' % (year, week), "%Y-W%W-%w").strftime('%Y-%m-%d')
|
||||
return redirect('/_%s/' % week)
|
||||
elif year:
|
||||
week = datetime.strptime('%s-W1-1' % year, "%Y-W%W-%w").strftime('%Y-%m-%d')
|
||||
return redirect('/_%s/' % week)
|
||||
context['items'] = archive_week
|
||||
return render(request, 'archive.html', context)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue