summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/views/generic/detail.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/views/generic/detail.py')
-rw-r--r--lib/python2.7/site-packages/django/views/generic/detail.py173
1 files changed, 0 insertions, 173 deletions
diff --git a/lib/python2.7/site-packages/django/views/generic/detail.py b/lib/python2.7/site-packages/django/views/generic/detail.py
deleted file mode 100644
index 180da30..0000000
--- a/lib/python2.7/site-packages/django/views/generic/detail.py
+++ /dev/null
@@ -1,173 +0,0 @@
-from __future__ import unicode_literals
-
-from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
-from django.db import models
-from django.http import Http404
-from django.utils.translation import ugettext as _
-from django.views.generic.base import TemplateResponseMixin, ContextMixin, View
-
-
-class SingleObjectMixin(ContextMixin):
- """
- Provides the ability to retrieve a single object for further manipulation.
- """
- model = None
- queryset = None
- slug_field = 'slug'
- context_object_name = None
- slug_url_kwarg = 'slug'
- pk_url_kwarg = 'pk'
-
- def get_object(self, queryset=None):
- """
- Returns the object the view is displaying.
-
- By default this requires `self.queryset` and a `pk` or `slug` argument
- in the URLconf, but subclasses can override this to return any object.
- """
- # Use a custom queryset if provided; this is required for subclasses
- # like DateDetailView
- if queryset is None:
- queryset = self.get_queryset()
-
- # Next, try looking up by primary key.
- pk = self.kwargs.get(self.pk_url_kwarg, None)
- slug = self.kwargs.get(self.slug_url_kwarg, None)
- if pk is not None:
- queryset = queryset.filter(pk=pk)
-
- # Next, try looking up by slug.
- elif slug is not None:
- slug_field = self.get_slug_field()
- queryset = queryset.filter(**{slug_field: slug})
-
- # If none of those are defined, it's an error.
- else:
- raise AttributeError("Generic detail view %s must be called with "
- "either an object pk or a slug."
- % self.__class__.__name__)
-
- try:
- # Get the single item from the filtered queryset
- obj = queryset.get()
- except ObjectDoesNotExist:
- raise Http404(_("No %(verbose_name)s found matching the query") %
- {'verbose_name': queryset.model._meta.verbose_name})
- return obj
-
- def get_queryset(self):
- """
- Get the queryset to look an object up against. May not be called if
- `get_object` is overridden.
- """
- if self.queryset is None:
- if self.model:
- return self.model._default_manager.all()
- else:
- raise ImproperlyConfigured("%(cls)s is missing a queryset. Define "
- "%(cls)s.model, %(cls)s.queryset, or override "
- "%(cls)s.get_queryset()." % {
- 'cls': self.__class__.__name__
- })
- return self.queryset._clone()
-
- def get_slug_field(self):
- """
- Get the name of a slug field to be used to look up by slug.
- """
- return self.slug_field
-
- def get_context_object_name(self, obj):
- """
- Get the name to use for the object.
- """
- if self.context_object_name:
- return self.context_object_name
- elif isinstance(obj, models.Model):
- return obj._meta.model_name
- else:
- return None
-
- def get_context_data(self, **kwargs):
- """
- Insert the single object into the context dict.
- """
- context = {}
- if self.object:
- context['object'] = self.object
- context_object_name = self.get_context_object_name(self.object)
- if context_object_name:
- context[context_object_name] = self.object
- context.update(kwargs)
- return super(SingleObjectMixin, self).get_context_data(**context)
-
-
-class BaseDetailView(SingleObjectMixin, View):
- """
- A base view for displaying a single object
- """
- def get(self, request, *args, **kwargs):
- self.object = self.get_object()
- context = self.get_context_data(object=self.object)
- return self.render_to_response(context)
-
-
-class SingleObjectTemplateResponseMixin(TemplateResponseMixin):
- template_name_field = None
- template_name_suffix = '_detail'
-
- def get_template_names(self):
- """
- Return a list of template names to be used for the request. May not be
- called if render_to_response is overridden. Returns the following list:
-
- * the value of ``template_name`` on the view (if provided)
- * the contents of the ``template_name_field`` field on the
- object instance that the view is operating upon (if available)
- * ``<app_label>/<model_name><template_name_suffix>.html``
- """
- try:
- names = super(SingleObjectTemplateResponseMixin, self).get_template_names()
- except ImproperlyConfigured:
- # If template_name isn't specified, it's not a problem --
- # we just start with an empty list.
- names = []
-
- # If self.template_name_field is set, grab the value of the field
- # of that name from the object; this is the most specific template
- # name, if given.
- if self.object and self.template_name_field:
- name = getattr(self.object, self.template_name_field, None)
- if name:
- names.insert(0, name)
-
- # The least-specific option is the default <app>/<model>_detail.html;
- # only use this if the object in question is a model.
- if isinstance(self.object, models.Model):
- names.append("%s/%s%s.html" % (
- self.object._meta.app_label,
- self.object._meta.model_name,
- self.template_name_suffix
- ))
- elif hasattr(self, 'model') and self.model is not None and issubclass(self.model, models.Model):
- names.append("%s/%s%s.html" % (
- self.model._meta.app_label,
- self.model._meta.model_name,
- self.template_name_suffix
- ))
-
- # If we still haven't managed to find any template names, we should
- # re-raise the ImproperlyConfigured to alert the user.
- if not names:
- raise
-
- return names
-
-
-class DetailView(SingleObjectTemplateResponseMixin, BaseDetailView):
- """
- Render a "detail" view of an object.
-
- By default this is a model instance looked up from `self.queryset`, but the
- view will support display of *any* object by overriding `self.get_object()`.
- """