summaryrefslogtreecommitdiff
path: root/django/views/generic/list_detail.py
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2006-05-02 01:31:56 +0000
committerAdrian Holovaty <adrian@holovaty.com>2006-05-02 01:31:56 +0000
commitf69cf70ed813a8cd7e1f963a14ae39103e8d5265 (patch)
treed3b32e84cd66573b3833ddf662af020f8ef2f7a8 /django/views/generic/list_detail.py
parentd5dbeaa9be359a4c794885c2e9f1b5a7e5e51fb8 (diff)
MERGED MAGIC-REMOVAL BRANCH TO TRUNK. This change is highly backwards-incompatible. Please read http://code.djangoproject.com/wiki/RemovingTheMagic for upgrade instructions.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@2809 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/views/generic/list_detail.py')
-rw-r--r--django/views/generic/list_detail.py61
1 files changed, 28 insertions, 33 deletions
diff --git a/django/views/generic/list_detail.py b/django/views/generic/list_detail.py
index 5cc496f5ed..68a1e73b07 100644
--- a/django/views/generic/list_detail.py
+++ b/django/views/generic/list_detail.py
@@ -1,18 +1,16 @@
-from django import models
-from django.core.template import loader
-from django.utils.httpwrappers import HttpResponse
+from django.template import loader, RequestContext
+from django.http import Http404, HttpResponse
from django.core.xheaders import populate_xheaders
-from django.core.extensions import DjangoContext
from django.core.paginator import ObjectPaginator, InvalidPage
-from django.core.exceptions import Http404, ObjectDoesNotExist
+from django.core.exceptions import ObjectDoesNotExist
-def object_list(request, app_label, module_name, paginate_by=None, allow_empty=False,
- template_name=None, template_loader=loader, extra_lookup_kwargs={},
+def object_list(request, queryset, paginate_by=None, allow_empty=False,
+ template_name=None, template_loader=loader,
extra_context={}, context_processors=None, template_object_name='object'):
"""
Generic list of objects.
- Templates: ``<app_label>/<module_name>_list``
+ Templates: ``<app_label>/<model_name>_list.html``
Context:
object_list
list of objects
@@ -35,10 +33,10 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F
hits
number of objects, total
"""
- mod = models.get_module(app_label, module_name)
- lookup_kwargs = extra_lookup_kwargs.copy()
+ queryset = queryset._clone()
+ model = queryset.model
if paginate_by:
- paginator = ObjectPaginator(mod, lookup_kwargs, paginate_by)
+ paginator = ObjectPaginator(queryset, paginate_by)
page = request.GET.get('page', 1)
try:
page = int(page)
@@ -48,7 +46,7 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F
object_list = []
else:
raise Http404
- c = DjangoContext(request, {
+ c = RequestContext(request, {
'%s_list' % template_object_name: object_list,
'is_paginated': paginator.pages > 1,
'results_per_page': paginate_by,
@@ -61,12 +59,11 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F
'hits' : paginator.hits,
}, context_processors)
else:
- object_list = mod.get_list(**lookup_kwargs)
- c = DjangoContext(request, {
- '%s_list' % template_object_name: object_list,
+ c = RequestContext(request, {
+ '%s_list' % template_object_name: queryset,
'is_paginated': False
}, context_processors)
- if len(object_list) == 0 and not allow_empty:
+ if not allow_empty and len(queryset) == 0:
raise Http404
for key, value in extra_context.items():
if callable(value):
@@ -74,44 +71,42 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F
else:
c[key] = value
if not template_name:
- template_name = "%s/%s_list" % (app_label, module_name)
+ template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name)
return HttpResponse(t.render(c))
-def object_detail(request, app_label, module_name, object_id=None, slug=None,
+def object_detail(request, queryset, object_id=None, slug=None,
slug_field=None, template_name=None, template_name_field=None,
- template_loader=loader, extra_lookup_kwargs={}, extra_context={},
+ template_loader=loader, extra_context={},
context_processors=None, template_object_name='object'):
"""
Generic list of objects.
- Templates: ``<app_label>/<module_name>_detail``
+ Templates: ``<app_label>/<model_name>_detail.html``
Context:
object
the object
"""
- mod = models.get_module(app_label, module_name)
- lookup_kwargs = {}
+ model = queryset.model
if object_id:
- lookup_kwargs['pk'] = object_id
+ queryset = queryset.filter(pk=object_id)
elif slug and slug_field:
- lookup_kwargs['%s__exact' % slug_field] = slug
+ queryset = queryset.filter(**{slug_field: slug})
else:
- raise AttributeError("Generic detail view must be called with either an object_id or a slug/slug_field")
- lookup_kwargs.update(extra_lookup_kwargs)
+ raise AttributeError, "Generic detail view must be called with either an object_id or a slug/slug_field."
try:
- object = mod.get_object(**lookup_kwargs)
+ obj = queryset.get()
except ObjectDoesNotExist:
- raise Http404("%s.%s does not exist for %s" % (app_label, module_name, lookup_kwargs))
+ raise Http404, "No %s found matching the query" % (model._meta.verbose_name)
if not template_name:
- template_name = "%s/%s_detail" % (app_label, module_name)
+ template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
if template_name_field:
- template_name_list = [getattr(object, template_name_field), template_name]
+ template_name_list = [getattr(obj, template_name_field), template_name]
t = template_loader.select_template(template_name_list)
else:
t = template_loader.get_template(template_name)
- c = DjangoContext(request, {
- template_object_name: object,
+ c = RequestContext(request, {
+ template_object_name: obj,
}, context_processors)
for key, value in extra_context.items():
if callable(value):
@@ -119,5 +114,5 @@ def object_detail(request, app_label, module_name, object_id=None, slug=None,
else:
c[key] = value
response = HttpResponse(t.render(c))
- populate_xheaders(request, response, app_label, module_name, getattr(object, object._meta.pk.name))
+ populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.name))
return response