--- django/views/generic/date_based.py
+++ django/views/generic/date_based.py
@@ -6,11 +6,13 @@ from django.core.exceptions import ObjectDoesNotExist
 from django.core.xheaders import populate_xheaders
 from django.db.models.fields import DateTimeField
 from django.http import Http404, HttpResponse
+from django.core.paginator import QuerySetPaginator, InvalidPage
 
 def archive_index(request, queryset, date_field, num_latest=15,
         template_name=None, template_loader=loader,
         extra_context=None, allow_empty=True, context_processors=None,
-        mimetype=None, allow_future=False, template_object_name='latest'):
+        mimetype=None, allow_future=False, template_object_name='latest',
+        paginate_by=None, page=None):
     """
     Generic top-level archive of date-based objects.
 
@@ -20,6 +22,10 @@ def archive_index(request, queryset, date_field, num_latest=15,
             List of years
         latest
             Latest N (defaults to 15) objects by date
+        paginator
+            paginator object
+        page_obj
+            page object
     """
     if extra_context is None: extra_context = {}
     model = queryset.model

@@ -46,12 +54,41 @@ def archive_index(request, queryset, date_field, num_latest=15,
             c[key] = value()
         else:
             c[key] = value
+
+    if paginate_by:
+        paginator = QuerySetPaginator(latest, paginate_by, allow_empty_first_page=allow_empty)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page_number = int(page)
+        except ValueError:
+            if page == 'last':
+                page_number = paginator.num_pages
+            else:
+                # Page is not 'last', nor can it be converted to an int.
+                raise Http404
+        try:
+            page_obj = paginator.page(page_number)
+        except InvalidPage:
+            raise Http404
+        c[template_object_name] = page_obj.object_list
+        c['paginator'] = paginator
+        c['page_obj'] = page_obj
+        c['is_paginated'] = True
+    else:
+        c['paginator'] = None
+        c['page_obj'] = None
+        c['is_paginated'] = False
+        if not allow_empty and len(queryset) == 0:
+            raise Http404
+
     return HttpResponse(t.render(c), mimetype=mimetype)
 
 def archive_year(request, year, queryset, date_field, template_name=None,
         template_loader=loader, extra_context=None, allow_empty=False,
         context_processors=None, template_object_name='object', mimetype=None,
-        make_object_list=False, allow_future=False):
+        make_object_list=False, allow_future=False,
+        paginate_by=None, page=None):
     """
     Generic yearly archive view.
 
@@ -64,6 +101,10 @@ def archive_year(request, year, queryset, date_field, template_name=None,
         object_list
             List of objects published in the given month
             (Only available if make_object_list argument is True)
+        paginator
+            paginator object
+        page_obj
+            page object
     """
     if extra_context is None: extra_context = {}
     model = queryset.model
@@ -94,12 +135,41 @@ def archive_year(request, year, queryset, date_field, template_name=None,
             c[key] = value()
         else:
             c[key] = value
+
+    if paginate_by:
+        paginator = QuerySetPaginator(object_list, paginate_by, allow_empty_first_page=allow_empty)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page_number = int(page)
+        except ValueError:
+            if page == 'last':
+                page_number = paginator.num_pages
+            else:
+                # Page is not 'last', nor can it be converted to an int.
+                raise Http404
+        try:
+            page_obj = paginator.page(page_number)
+        except InvalidPage:
+            raise Http404
+        c['%s_list' % template_object_name] = page_obj.object_list
+        c['paginator'] = paginator
+        c['page_obj'] = page_obj
+        c['is_paginated'] = True
+    else:
+        c['paginator'] = None
+        c['page_obj'] = None
+        c['is_paginated'] = False
+        if not allow_empty and len(queryset) == 0:
+            raise Http404
+
     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, allow_future=False):
+        template_object_name='object', mimetype=None, allow_future=False,
+        paginate_by=None, page=None):
     """
     Generic monthly archive view.
 
@@ -113,6 +183,10 @@ def archive_month(request, year, month, queryset, date_field,
             (date) the first day of the previous month
         object_list:
             list of objects published in the given month
+        paginator
+            paginator object
+        page_obj
+            page object
     """
     if extra_context is None: extra_context = {}
     try:
@@ -160,12 +234,41 @@ def archive_month(request, year, month, queryset, date_field,
             c[key] = value()
         else:
             c[key] = value
+
+    if paginate_by:
+        paginator = QuerySetPaginator(object_list, paginate_by, allow_empty_first_page=allow_empty)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page_number = int(page)
+        except ValueError:
+            if page == 'last':
+                page_number = paginator.num_pages
+            else:
+                # Page is not 'last', nor can it be converted to an int.
+                raise Http404
+        try:
+            page_obj = paginator.page(page_number)
+        except InvalidPage:
+            raise Http404
+        c['%s_list' % template_object_name] = page_obj.object_list
+        c['paginator'] = paginator
+        c['page_obj'] = page_obj
+        c['is_paginated'] = True
+    else:
+        c['paginator'] = None
+        c['page_obj'] = None
+        c['is_paginated'] = False
+        if not allow_empty and len(queryset) == 0:
+            raise Http404
+
     return HttpResponse(t.render(c), mimetype=mimetype)
 
 def archive_week(request, year, week, queryset, date_field,
         template_name=None, template_loader=loader,
         extra_context=None, allow_empty=True, context_processors=None,
-        template_object_name='object', mimetype=None, allow_future=False):
+        template_object_name='object', mimetype=None, allow_future=False,
+        paginate_by=None, page=None):
     """
     Generic weekly archive view.
 
@@ -175,6 +278,10 @@ def archive_week(request, year, week, queryset, date_field,
             (date) this week
         object_list:
             list of objects published in the given week
+        paginator
+            paginator object
+        page_obj
+            page object
     """
     if extra_context is None: extra_context = {}
     try:
@@ -208,13 +315,42 @@ def archive_week(request, year, week, queryset, date_field,
             c[key] = value()
         else:
             c[key] = value
+
+    if paginate_by:
+        paginator = QuerySetPaginator(object_list, paginate_by, allow_empty_first_page=allow_empty)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page_number = int(page)
+        except ValueError:
+            if page == 'last':
+                page_number = paginator.num_pages
+            else:
+                # Page is not 'last', nor can it be converted to an int.
+                raise Http404
+        try:
+            page_obj = paginator.page(page_number)
+        except InvalidPage:
+            raise Http404
+        c['%s_list' % template_object_name] = page_obj.object_list
+        c['paginator'] = paginator
+        c['page_obj'] = page_obj
+        c['is_paginated'] = True
+    else:
+        c['paginator'] = None
+        c['page_obj'] = None
+        c['is_paginated'] = False
+        if not allow_empty and len(queryset) == 0:
+            raise Http404
+
     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, allow_future=False):
+        mimetype=None, allow_future=False,
+        paginate_by=None, page=None):
     """
     Generic daily archive view.
 
@@ -228,6 +364,10 @@ def archive_day(request, year, month, day, queryset, date_field,
             (datetime) the previous day
         next_day
             (datetime) the next day, or None if the current day is today
+        paginator
+            paginator object
+        page_obj
+            page object
     """
     if extra_context is None: extra_context = {}
     try:
@@ -272,6 +412,34 @@ def archive_day(request, year, month, day, queryset, date_field,
             c[key] = value()
         else:
             c[key] = value
+
+    if paginate_by:
+        paginator = QuerySetPaginator(object_list, paginate_by, allow_empty_first_page=allow_empty)
+        if not page:
+            page = request.GET.get('page', 1)
+        try:
+            page_number = int(page)
+        except ValueError:
+            if page == 'last':
+                page_number = paginator.num_pages
+            else:
+                # Page is not 'last', nor can it be converted to an int.
+                raise Http404
+        try:
+            page_obj = paginator.page(page_number)
+        except InvalidPage:
+            raise Http404
+        c['%s_list' % template_object_name] = page_obj.object_list
+        c['paginator'] = paginator
+        c['page_obj'] = page_obj
+        c['is_paginated'] = True
+    else:
+        c['paginator'] = None
+        c['page_obj'] = None
+        c['is_paginated'] = False
+        if not allow_empty and len(queryset) == 0:
+            raise Http404
+
     return HttpResponse(t.render(c), mimetype=mimetype)
 
 def archive_today(request, **kwargs):
