1 | def 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 |
|
---|