Ticket #328: archive_week.txt

File archive_week.txt, 1.5 KB (added by Dagur Páll Ammendrup, 19 years ago)

My implementation of archive week

Line 
1def archive_week(request, year, week, app_label, module_name, date_field,
2 template_name=None, extra_lookup_kwargs={},
3 extra_context={}):
4 """
5 Generic weekly archive view.
6
7 Templates: ``<app_label>/<module_name>_archive_week``
8 Context:
9 week:
10 this week
11 object_list:
12 list of objects published in the given week
13 """
14 try:
15 date = datetime.date(*time.strptime(year+'-0-'+week, '%Y-%w-%U')[:3])
16 except ValueError:
17 raise Http404
18
19 mod = get_module(app_label, module_name)
20 now = datetime.datetime.now()
21 # Calculate first and last day of week, for use in a date-range lookup.
22 first_day = date
23 last_day = date + datetime.timedelta(days=+7)
24
25 lookup_kwargs = {'%s__range' % date_field: (first_day, last_day)}
26 # Only bother to check current date if the week isn't in the past.
27 if last_day >= now.date():
28 lookup_kwargs['%s__lte' % date_field] = now
29 lookup_kwargs.update(extra_lookup_kwargs)
30 object_list = mod.get_list(**lookup_kwargs)
31 if not object_list:
32 raise Http404
33 if not template_name:
34 template_name = "%s/%s_archive_week" % (app_label, module_name)
35 t = template_loader.get_template(template_name)
36 c = Context(request, {
37 'object_list': object_list,
38 'week': date,
39 })
40 for key, value in extra_context.items():
41 if callable(value):
42 c[key] = value()
43 else:
44 c[key] = value
45 return HttpResponse(t.render(c))
46
Back to Top