def archive_week(request, year, week, app_label, module_name, date_field, template_name=None, extra_lookup_kwargs={}, extra_context={}): """ Generic weekly archive view. Templates: ``/_archive_week`` Context: week: this week object_list: list of objects published in the given week """ try: date = datetime.date(*time.strptime(year+'-0-'+week, '%Y-%w-%U')[:3]) except ValueError: raise Http404 mod = get_module(app_label, module_name) now = datetime.datetime.now() # Calculate first and last day of week, for use in a date-range lookup. first_day = date last_day = date + datetime.timedelta(days=+7) lookup_kwargs = {'%s__range' % date_field: (first_day, last_day)} # Only bother to check current date if the week isn't in the past. if last_day >= now.date(): lookup_kwargs['%s__lte' % date_field] = now lookup_kwargs.update(extra_lookup_kwargs) object_list = mod.get_list(**lookup_kwargs) if not object_list: raise Http404 if not template_name: template_name = "%s/%s_archive_week" % (app_label, module_name) t = template_loader.get_template(template_name) c = Context(request, { 'object_list': object_list, 'week': date, }) for key, value in extra_context.items(): if callable(value): c[key] = value() else: c[key] = value return HttpResponse(t.render(c))