
 X@                 @   s   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z
 d  d l m Z m Z m Z Gd d   d e  Z Gd	 d
   d
 e e  Z Gd d   d e  Z Gd d   d e e  Z d S)    )unicode_literals)ImproperlyConfigured)models)Http404)ugettext)ContextMixinTemplateResponseMixinViewc                   s   e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 d Z
 d d d  Z d d	   Z d
 d   Z d d   Z   f d d   Z   S)SingleObjectMixinzT
    Provides the ability to retrieve a single object for further manipulation.
    NslugpkFc             C   s2  | d k r |  j    } n  |  j j |  j  } |  j j |  j  } | d k	 rf | j d |  } n  | d k	 r | d k s |  j r |  j   } | j i | | 6  } n  | d k r | d k r t d |  j	 j
   n  y | j   } Wn> | j j k
 r-t t d  i | j j j d 6  Yn X| S)z
        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.
        Nr   zIGeneric detail view %s must be called with either an object pk or a slug.z,No %(verbose_name)s found matching the queryverbose_name)get_querysetkwargsgetpk_url_kwargslug_url_kwargfilterquery_pk_and_slugget_slug_fieldAttributeError	__class____name__modelZDoesNotExistr   __metar   )selfquerysetr   r   
slug_fieldobj r    I/home/ubuntu/projects/ifolica/build/django/django/views/generic/detail.py
get_object   s$    	!zSingleObjectMixin.get_objectc             C   sU   |  j  d k rH |  j r( |  j j j   St d i |  j j d 6  n  |  j  j   S)z
        Return the `QuerySet` that will be used to look up the object.

        Note that this method is called by the default implementation of
        `get_object` and may not be called if `get_object` is overridden.
        Nzj%(cls)s is missing a QuerySet. Define %(cls)s.model, %(cls)s.queryset, or override %(cls)s.get_queryset().cls)r   r   Z_default_managerallr   r   r   )r   r    r    r!   r   ;   s    	zSingleObjectMixin.get_querysetc             C   s   |  j  S)zM
        Get the name of a slug field to be used to look up by slug.
        )r   )r   r    r    r!   r   O   s    z SingleObjectMixin.get_slug_fieldc             C   s4   |  j  r |  j  St | t j  r, | j j Sd Sd S)z5
        Get the name to use for the object.
        N)context_object_name
isinstancer   Modelr   
model_name)r   r   r    r    r!   get_context_object_nameU   s
    	
z)SingleObjectMixin.get_context_object_namec                sj   i  } |  j  rG |  j  | d <|  j |  j   } | rG |  j  | | <qG n  | j |  t t |   j |   S)zA
        Insert the single object into the context dict.
        object)r*   r)   updatesuperr
   get_context_data)r   r   contextr%   )r   r    r!   r-   `   s    	z"SingleObjectMixin.get_context_data)r   
__module____qualname____doc__r   r   r   r%   r   r   r   r"   r   r   r)   r-   r    r    )r   r!   r
   
   s   %r
   c               @   s"   e  Z d  Z d Z d d   Z d S)BaseDetailViewz4
    A base view for displaying a single object
    c             O   s1   |  j    |  _ |  j d |  j  } |  j |  S)Nr*   )r"   r*   r-   Zrender_to_response)r   requestargsr   r.   r    r    r!   r   r   s    zBaseDetailView.getN)r   r/   r0   r1   r   r    r    r    r!   r2   n   s   r2   c                   s.   e  Z d  Z d Z d Z   f d d   Z   S)!SingleObjectTemplateResponseMixinNZ_detailc                s6  y t  t |   j   } Wnt k
 r1g  } |  j ru |  j ru t |  j |  j d  } | ru | j d |  qu n  t |  j t	 j
  r |  j j } | j d | j | j |  j f  ne t |  d  r!|  j d k	 r!t |  j t	 j
  r!| j d |  j j j |  j j j |  j f  n  | s-  n  Yn X| S)a  
        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``
        Nr   z%s/%s%s.htmlr   )r,   r5   get_template_namesr   r*   template_name_fieldgetattrinsertr&   r   r'   r   appendZ	app_labelr(   template_name_suffixhasattrr   
issubclass)r   namesnameZobject_meta)r   r    r!   r6   |   s,    
	3	z4SingleObjectTemplateResponseMixin.get_template_names)r   r/   r0   r7   r;   r6   r    r    )r   r!   r5   x   s   r5   c               @   s   e  Z d  Z d Z d S)
DetailViewz
    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()`.
    N)r   r/   r0   r1   r    r    r    r!   r@      s   r@   N)
__future__r   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.httpr   Zdjango.utils.translationr   r   Zdjango.views.generic.baser   r   r	   r
   r2   r5   r@   r    r    r    r!   <module>   s   d
5