Index: django/views/generic/list_detail.py
===================================================================
--- django/views/generic/list_detail.py	(revision 4229)
+++ django/views/generic/list_detail.py	(working copy)
@@ -1,5 +1,6 @@
 from django.template import loader, RequestContext
 from django.http import Http404, HttpResponse
+from django.db.models.query import QuerySet
 from django.core.xheaders import populate_xheaders
 from django.core.paginator import ObjectPaginator, InvalidPage
 from django.core.exceptions import ObjectDoesNotExist
@@ -11,7 +12,7 @@
     """
     Generic list of objects.
 
-    Templates: ``<app_label>/<model_name>_list.html``
+    Templates: ``<app_label>/<model_name>_list.html`` if queryset is a QuerySet
     Context:
         object_list
             list of objects
@@ -34,8 +35,10 @@
         hits
             number of objects, total
     """
-    if extra_context is None: extra_context = {}
-    queryset = queryset._clone()
+    if extra_context is None:
+        extra_context = {}
+    if type(queryset) == QuerySet:
+        queryset = queryset._clone()
     if paginate_by:
         paginator = ObjectPaginator(queryset, paginate_by)
         if not page:
@@ -73,8 +76,11 @@
         else:
             c[key] = value
     if not template_name:
-        model = queryset.model
-        template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
+        if type(queryset) == QuerySet:
+            model = queryset.model
+            template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
+        else:
+            raise AttributeError, "Generic list view must be called with either a template_name or a queryset (rather than a list)."
     t = template_loader.get_template(template_name)
     return HttpResponse(t.render(c), mimetype=mimetype)
 
Index: docs/generic_views.txt
===================================================================
--- docs/generic_views.txt	(revision 4229)
+++ docs/generic_views.txt	(working copy)
@@ -679,8 +679,15 @@
 
 **Required arguments:**
 
-    * ``queryset``: A ``QuerySet`` that represents the objects.
+    * ``queryset``: A ``QuerySet`` or other sequence such as a list that
+      represents the objects.
 
+    * Either the argument ``queryset`` should be a ``QuerySet`` or the
+      argument ``template_name`` should be supplied. ``template_name`` is the
+      full name of a template to use in rendering the page. This also lets you
+      override the default template name if you are using a ``QuerySet`` for
+      ``queryset`` (see below).
+
 **Optional arguments:**
 
     * ``paginate_by``: An integer specifying how many objects should be
@@ -690,9 +697,6 @@
       number, or a ``page`` variable specified in the URLconf. See
       "Notes on pagination" below.
 
-    * ``template_name``: The full name of a template to use in rendering the
-      page. This lets you override the default template name (see below).
-
     * ``template_loader``: The template loader to use when loading the
       template. By default, it's ``django.template.loader``.
 
@@ -719,8 +723,8 @@
 
 **Template name:**
 
-If ``template_name`` isn't specified, this view will use the template
-``<app_label>/<model_name>_list.html`` by default.
+If ``template_name`` isn't specified and ``queryset`` is a ``QuerySet``, this
+view will use the template ``<app_label>/<model_name>_list.html`` by default.
 
 **Template context:**
 
