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: ``<app_label>/<module_name>_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))

