U
    J|e                     @   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
mZmZ G dd de
ZG dd	 d	eeZG d
d deZG dd deeZdS )    )ImproperlyConfigured)models)Http404)gettext)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  ZS )SingleObjectMixinzS
    Provide the ability to retrieve a single object for further manipulation.
    NslugpkFc                 C   s   |dkr|   }| j| j}| j| j}|dk	r@|j|d}|dk	rn|dksV| jrn|  }|jf ||i}|dkr|dkrtd| j	j
 z| }W n2 |jjk
r   ttdd|jjji Y nX |S )z
        Return the object the view is displaying.

        Require `self.queryset` and a `pk` or `slug` argument in the URLconf.
        Subclasses can override this to return any object.
        N)r   zXGeneric detail view %s must be called with either an object pk or a slug in the URLconf.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__modelDoesNotExistr   __metar   )selfquerysetr   r
   
slug_fieldobj r    X/var/www/website-v5/atlas_env/lib/python3.8/site-packages/django/views/generic/detail.py
get_object   s0    	
zSingleObjectMixin.get_objectc                 C   s:   | j dkr0| jr| jj S tdd| jji | j  S )z
        Return the `QuerySet` that will be used to look up the object.

        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   _default_managerallr   r   r   r   r    r    r!   r   =   s    

zSingleObjectMixin.get_querysetc                 C   s   | j S )z;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   s(   | j r| j S t|tjr |jjS dS dS )z#Get the name to use for the object.N)context_object_name
isinstancer   Modelr   
model_name)r   r   r    r    r!   get_context_object_nameS   s
    z)SingleObjectMixin.get_context_object_namec                    sF   i }| j r.| j |d< | | j }|r.| j ||< || t jf |S )z/Insert the single object into the context dict.object)r,   r+   updatesuperget_context_data)r   r   contextr'   r   r    r!   r/   \   s    


z"SingleObjectMixin.get_context_data)N)r   
__module____qualname____doc__r   r   r   r'   r   r   r   r"   r   r   r+   r/   __classcell__r    r    r1   r!   r	      s   
(	r	   c                   @   s   e Zd ZdZdd ZdS )BaseDetailViewz+A base view for displaying a single object.c                 O   s"   |   | _| j| jd}| |S )N)r,   )r"   r,   r/   render_to_response)r   requestargsr   r0   r    r    r!   r   k   s    
zBaseDetailView.getN)r   r2   r3   r4   r   r    r    r    r!   r6   h   s   r6   c                       s$   e Zd ZdZdZ fddZ  ZS )!SingleObjectTemplateResponseMixinN_detailc              	      s   zt   }W n tk
r   g }| jrN| jrNt| j| jd}|rN|d| t| jtj	r| jj
}|d|j|j| jf  n@t| dddk	rt| jtj	r|d| jj
j| jj
j| jf  |sƂ Y n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. Return 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.   get_template_namesr   r,   template_name_fieldgetattrinsertr(   r   r)   r   append	app_labelr*   template_name_suffix
issubclassr   )r   namesnameZobject_metar1   r    r!   r<   u   sB    
 z4SingleObjectTemplateResponseMixin.get_template_names)r   r2   r3   r=   rB   r<   r5   r    r    r1   r!   r:   q   s   r:   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   r2   r3   r4   r    r    r    r!   rF      s   rF   N)django.core.exceptionsr   	django.dbr   django.httpr   django.utils.translationr   r   django.views.generic.baser   r   r   r	   r6   r:   rF   r    r    r    r!   <module>   s   `	=