ó
ů˘TQc           @  sÔ   d  d l  m Z d  d l m Z 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 d e f d     YZ d	 e e f d
     YZ d e f d     YZ d e e f d     YZ d S(   i˙˙˙˙(   t   unicode_literals(   t   ImproperlyConfiguredt   ObjectDoesNotExist(   t   models(   t   Http404(   t   ugettext(   t   TemplateResponseMixint   ContextMixint   Viewt   SingleObjectMixinc           B  sb   e  Z d  Z d Z d Z d Z d Z d Z d Z	 d d  Z
 d   Z d   Z d   Z d   Z RS(	   uT   
    Provides the ability to retrieve a single object for further manipulation.
    u   slugu   pkc         C  s  | d k r |  j   } n  |  j j |  j d  } |  j j |  j d  } | d k	 rl | j d |  } nG | d k	 r |  j   } | j i | | 6  } n t d |  j	 j
   y | j   } Wn7 t k
 rü t t d  i | j j j d 6  n X| S(   uŰ   
        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.
        t   pkuI   Generic detail view %s must be called with either an object pk or a slug.u,   No %(verbose_name)s found matching the queryu   verbose_nameN(   t   Nonet   get_querysett   kwargst   gett   pk_url_kwargt   slug_url_kwargt   filtert   get_slug_fieldt   AttributeErrort	   __class__t   __name__R   R   t   _t   modelt   _metat   verbose_name(   t   selft   querysetR
   t   slugt
   slug_fieldt   obj(    (    s4   ../Django//lib/python/django/views/generic/detail.pyt
   get_object   s"    	c         C  sU   |  j  d k rH |  j r( |  j j j   St d i |  j j d 6  n  |  j  j   S(   uy   
        Get the queryset to look an object up against. May not be called if
        `get_object` is overridden.
        uj   %(cls)s is missing a queryset. Define %(cls)s.model, %(cls)s.queryset, or override %(cls)s.get_queryset().u   clsN(	   R   R   R   t   _default_managert   allR   R   R   t   _clone(   R   (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR   :   s    	c         C  s   |  j  S(   uM   
        Get the name of a slug field to be used to look up by slug.
        (   R   (   R   (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR   J   s    c         C  s:   |  j  r |  j  St | t j  r2 | j j j   Sd Sd S(   u5   
        Get the name to use for the object.
        N(   t   context_object_namet
   isinstanceR   t   ModelR   t   object_namet   lowerR   (   R   R   (    (    s4   ../Django//lib/python/django/views/generic/detail.pyt   get_context_object_nameP   s
    	c         K  sQ   i  } |  j  |  j  } | r. |  j | | <n  | j |  t t |   j |   S(   uA   
        Insert the single object into the context dict.
        (   R(   t   objectt   updatet   superR	   t   get_context_data(   R   R   t   contextR#   (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR,   [   s    N(   R   t
   __module__t   __doc__R   R   R   R   R#   R   R   R   R   R   R(   R,   (    (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR	   
   s   %			t   BaseDetailViewc           B  s   e  Z d  Z d   Z RS(   u4   
    A base view for displaying a single object
    c         O  s1   |  j    |  _ |  j d |  j  } |  j |  S(   NR)   (   R   R)   R,   t   render_to_response(   R   t   requestt   argsR   R-   (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR   k   s    (   R   R.   R/   R   (    (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR0   g   s   t!   SingleObjectTemplateResponseMixinc           B  s   e  Z d Z d  Z d   Z RS(   u   _detailc         C  s5  y t  t |   j   } Wn t k
 r2 g  } n X|  j ry |  j ry t |  j |  j d  } | ry | j d |  qy n  t	 |  j t
 j  rĆ | j d |  j j j |  j j j j   |  j f  nk t |  d  r1|  j d k	 r1t |  j t
 j  r1| j d |  j j j |  j j j j   |  j f  n  | S(   uĂ  
        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>/<object_name><template_name_suffix>.html``        
        i    u   %s/%s%s.htmlu   modelN(   R+   R4   t   get_template_namesR   R)   t   template_name_fieldt   getattrR   t   insertR$   R   R%   t   appendR   t	   app_labelR&   R'   t   template_name_suffixt   hasattrR   t
   issubclass(   R   t   namest   name(    (    s4   ../Django//lib/python/django/views/generic/detail.pyR5   u   s&    

	3	N(   R   R.   R   R6   R;   R5   (    (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR4   q   s   t
   DetailViewc           B  s   e  Z d  Z RS(   uĐ   
    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()`.
    (   R   R.   R/   (    (    (    s4   ../Django//lib/python/django/views/generic/detail.pyR@      s   N(   t
   __future__R    t   django.core.exceptionsR   R   t	   django.dbR   t   django.httpR   t   django.utils.translationR   R   t   django.views.generic.baseR   R   R   R	   R0   R4   R@   (    (    (    s4   ../Django//lib/python/django/views/generic/detail.pyt   <module>   s   ]
.