Index: django/views/generic/date_based.py
===================================================================
--- django/views/generic/date_based.py	(revision 3358)
+++ django/views/generic/date_based.py	(working copy)
@@ -1,6 +1,7 @@
 from django.template import loader, RequestContext
 from django.core.exceptions import ObjectDoesNotExist
 from django.core.xheaders import populate_xheaders
+from django.core.paginator import ObjectPaginator, InvalidPage
 from django.http import Http404, HttpResponse
 import datetime, time
 
@@ -92,10 +93,10 @@
             c[key] = value
     return HttpResponse(t.render(c), mimetype=mimetype)
 
-def archive_month(request, year, month, queryset, date_field,
-        month_format='%b', template_name=None, template_loader=loader,
-        extra_context=None, allow_empty=False, context_processors=None,
-        template_object_name='object', mimetype=None):
+def archive_month(request, year, month, queryset, date_field, paginate_by=None,
+        page=None, month_format='%b', template_name=None, 
+        template_loader=loader, extra_context=None, allow_empty=False, 
+        context_processors=None, template_object_name='object', mimetype=None):
     """
     Generic monthly archive view.
 
@@ -109,6 +110,24 @@
             (date) the first day of the previous month
         object_list:
             list of objects published in the given month
+        is_paginated
+            are the results paginated?
+        results_per_page
+            number of objects per page (if paginated)
+        has_next
+            is there a next page?
+        has_previous
+            is there a prev page?
+        page
+            the current page
+        next
+            the next page
+        previous
+            the previous page
+        pages
+            number of pages, total
+        hits
+            number of objects, total
     """
     if extra_context is None: extra_context = {}
     try:
@@ -133,6 +152,20 @@
     object_list = queryset.filter(**lookup_kwargs)
     if not object_list and not allow_empty:
         raise Http404
+
+    if paginate_by:
+        paginator = ObjectPaginator(object_list, paginate_by)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page = int(page)
+            object_list = paginator.get_page(page - 1)
+        except (InvalidPage, ValueError):
+            if page == 1 and allow_empty:
+                object_list = []
+            else:
+                raise Http404
+
     if not template_name:
         template_name = "%s/%s_archive_month.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
@@ -142,15 +175,30 @@
         'next_month': (last_day < datetime.date.today()) and (last_day + datetime.timedelta(days=1)) or None,
         'previous_month': first_day - datetime.timedelta(days=1),
     }, context_processors)
+
     for key, value in extra_context.items():
         if callable(value):
             c[key] = value()
         else:
             c[key] = value
+
+    if paginate_by:
+        c['is_paginated'] = paginator.pages > 1
+        c['results_per_page'] = paginate_by
+        c['has_next'] = paginator.has_next_page(page - 1)
+        c['has_previous'] = paginator.has_previous_page(page - 1)
+        c['page'] = page
+        c['next'] = page + 1
+        c['previous'] = page - 1
+        c['pages'] = paginator.pages
+        c['hits'] = paginator.hits
+    else:
+        c['is_paginated'] = False
+
     return HttpResponse(t.render(c), mimetype=mimetype)
 
-def archive_week(request, year, week, queryset, date_field,
-        template_name=None, template_loader=loader,
+def archive_week(request, year, week, queryset, date_field, paginate_by=None,
+        page=None, template_name=None, template_loader=loader,
         extra_context=None, allow_empty=True, context_processors=None,
         template_object_name='object', mimetype=None):
     """
@@ -162,6 +210,24 @@
             (date) this week
         object_list:
             list of objects published in the given week
+        is_paginated
+            are the results paginated?
+        results_per_page
+            number of objects per page (if paginated)
+        has_next
+            is there a next page?
+        has_previous
+            is there a prev page?
+        page
+            the current page
+        next
+            the next page
+        previous
+            the previous page
+        pages
+            number of pages, total
+        hits
+            number of objects, total
     """
     if extra_context is None: extra_context = {}
     try:
@@ -183,6 +249,18 @@
     object_list = queryset.filter(**lookup_kwargs)
     if not object_list and not allow_empty:
         raise Http404
+    if paginate_by:
+        paginator = ObjectPaginator(object_list, paginate_by)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page = int(page)
+            object_list = paginator.get_page(page - 1)
+        except (InvalidPage, ValueError):
+            if page == 1 and allow_empty:
+                object_list = []
+            else:
+                raise Http404
     if not template_name:
         template_name = "%s/%s_archive_week.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
@@ -195,13 +273,25 @@
             c[key] = value()
         else:
             c[key] = value
+    if paginate_by:
+        c['is_paginated'] = paginator.pages > 1
+        c['results_per_page'] = paginate_by
+        c['has_next'] = paginator.has_next_page(page - 1)
+        c['has_previous'] = paginator.has_previous_page(page - 1)
+        c['page'] = page
+        c['next'] = page + 1
+        c['previous'] = page - 1
+        c['pages'] = paginator.pages
+        c['hits'] = paginator.hits
+    else:
+        c['is_paginated'] = False
     return HttpResponse(t.render(c), mimetype=mimetype)
 
 def archive_day(request, year, month, day, queryset, date_field,
-        month_format='%b', day_format='%d', template_name=None,
-        template_loader=loader, extra_context=None, allow_empty=False,
-        context_processors=None, template_object_name='object',
-        mimetype=None):
+        paginate_by=None, page=None, month_format='%b', day_format='%d', 
+        template_name=None, template_loader=loader, extra_context=None, 
+        allow_empty=False, context_processors=None, 
+        template_object_name='object', mimetype=None):
     """
     Generic daily archive view.
 
@@ -215,6 +305,24 @@
             (datetime) the previous day
         next_day
             (datetime) the next day, or None if the current day is today
+        is_paginated
+            are the results paginated?
+        results_per_page
+            number of objects per page (if paginated)
+        has_next
+            is there a next page?
+        has_previous
+            is there a prev page?
+        page
+            the current page
+        next
+            the next page
+        previous
+            the previous page
+        pages
+            number of pages, total
+        hits
+            number of objects, total
     """
     if extra_context is None: extra_context = {}
     try:
@@ -232,11 +340,24 @@
     # Only bother to check current date if the date isn't in the past.
     if date >= now.date():
         lookup_kwargs['%s__lte' % date_field] = now
-    object_list = queryset.filter(**lookup_kwargs)
+    object_list = queryset.filter(**lookup_kwargs)    
     if not allow_empty and not object_list:
         raise Http404
+    if paginate_by:
+        paginator = ObjectPaginator(object_list, paginate_by)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page = int(page)
+            object_list = paginator.get_page(page - 1)
+        except (InvalidPage, ValueError):
+            if page == 1 and allow_empty:
+                object_list = []
+            else:
+                raise Http404
     if not template_name:
         template_name = "%s/%s_archive_day.html" % (model._meta.app_label, model._meta.object_name.lower())
+
     t = template_loader.get_template(template_name)
     c = RequestContext(request, {
         '%s_list' % template_object_name: object_list,
@@ -249,6 +370,18 @@
             c[key] = value()
         else:
             c[key] = value
+    if paginate_by:
+        c['is_paginated'] = paginator.pages > 1
+        c['results_per_page'] = paginate_by
+        c['has_next'] = paginator.has_next_page(page - 1)
+        c['has_previous'] = paginator.has_previous_page(page - 1)
+        c['page'] = page
+        c['next'] = page + 1
+        c['previous'] = page - 1
+        c['pages'] = paginator.pages
+        c['hits'] = paginator.hits
+    else:
+        c['is_paginated'] = False
     return HttpResponse(t.render(c), mimetype=mimetype)
 
 def archive_today(request, **kwargs):
