
    Evg                         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  G d de          Z G d	 d
ee          Z G d de          Z G d dee          ZdS )    )ImproperlyConfigured)InvalidPage	Paginator)QuerySet)Http404)gettext)ContextMixinTemplateResponseMixinViewc                        e Zd ZdZdZdZdZdZdZdZ	e
ZdZdZd Zd Zd Zd	 Z	 dd
Zd Zd Zd Zdd fd
Z xZS )MultipleObjectMixinz0A mixin for views manipulating multiple objects.TNr   pagec                 n   | j         1| j         }t          |t                    r|                                }nD| j        | j        j                                        }nt          dd| j        j        iz            | 	                                }|r"t          |t                    r|f} |j        | }|S )z
        Return the list of items for this view.

        The return value must be an iterable and may be an instance of
        `QuerySet` in which case `QuerySet` specific behavior will be enabled.
        Nzj%(cls)s is missing a QuerySet. Define %(cls)s.model, %(cls)s.queryset, or override %(cls)s.get_queryset().cls)queryset
isinstancer   allmodel_default_managerr   	__class____name__get_orderingstrorder_by)selfr   orderings      V/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/views/generic/list.pyget_querysetz MultipleObjectMixin.get_queryset   s     =$}H(H-- *#<<>>Z#z26688HH&*-2DN4K,LM  
 $$&& 	4(C(( '$;(x((3H    c                     | j         S )z<Return the field or fields to use for ordering the queryset.)r   r   s    r   r   z MultipleObjectMixin.get_ordering1   s
    }r   c                 ~   |                      |||                                 |                                           }| j        }| j                            |          p | j        j                            |          pd}	 t          |          }n:# t          $ r- |dk    r|j
        }nt          t          d                    Y nw xY w	 |                    |          }|||j        |                                fS # t           $ r4}t          t          d          |t#          |          dz            d}~ww xY w)z!Paginate the queryset, if needed.orphansallow_empty_first_page   lastu:   Page is not “last”, nor can it be converted to an int.z+Invalid page (%(page_number)s): %(message)s)page_numbermessageN)get_paginatorget_paginate_orphansget_allow_empty
page_kwargkwargsgetrequestGETint
ValueError	num_pagesr   _r   object_listhas_other_pagesr   r   )r   r   	page_size	paginatorr-   r   r(   es           r   paginate_querysetz%MultipleObjectMixin.paginate_queryset5   sg   &&--//#'#7#7#9#9	 ' 
 
	 _
{z**Sdl.>.B.B:.N.NSRS	d))KK 	 	 	v~~'1RSS   		>>+..DtT%5t7K7K7M7MNN 	 	 	?@@"-#a&&AAB  	s*   B 4CC1C> >
D</D77D<c                     | j         S )zX
        Get the number of items to paginate by, or ``None`` for no pagination.
        )paginate_by)r   r   s     r   get_paginate_byz#MultipleObjectMixin.get_paginate_byQ   s     r   c                 &     | j         ||f||d|S )z2Return an instance of the paginator for this view.r#   )paginator_class)r   r   per_pager$   r%   r.   s         r   r*   z!MultipleObjectMixin.get_paginatorW   s=     $t#
 #9	
 

 
 
 	
r   c                     | j         S )zg
        Return the maximum number of orphans extend the last page by when
        paginating.
        )paginate_orphansr!   s    r   r+   z(MultipleObjectMixin.get_paginate_orphansc   s    
 $$r   c                     | j         S )z
        Return ``True`` if the view should display empty lists and ``False``
        if a 404 should be raised instead.
        )allow_emptyr!   s    r   r,   z#MultipleObjectMixin.get_allow_emptyj   s    
 r   c                 j    | j         r| j         S t          |d          rd|j        j        j        z  S dS )z3Get the name of the item to be used in the context.r   z%s_listN)context_object_namehasattrr   _meta
model_name)r   r6   s     r   get_context_object_namez+MultipleObjectMixin.get_context_object_nameq   sA    # 	++['** 	{06AAA4r   )r6   c                0   ||n| j         }|                     |          }|                     |          }|r#|                     ||          \  }}}}||||d}	nddd|d}	|||	|<   |	                    |            t                      j        di |	S )zGet the context for this view.N)r9   page_objis_paginatedr6   F )r6   r>   rK   r;   updatesuperget_context_data)r   r6   r.   r   r8   rG   r9   r   rN   contextr   s             r   rR   z$MultipleObjectMixin.get_context_dataz   s    "-"9;;t?O((22	"::8DD 	6:6L6L)7 73ItX| '  ,'	 GG "  %'	 G *+3G'(v'uww'22'222r   )r   T)r   
__module____qualname____doc__rE   r   r   r=   rC   rG   r   r@   r-   r   r   r   r;   r>   r*   r+   r,   rK   rR   __classcell__r   s   @r   r   r   	   s        ::KHEKOJH  6    8      EI

 

 

 

% % %        /3 3 3 3 3 3 3 3 3 3 3 3r   r   c                       e Zd ZdZd ZdS )BaseListViewz-A base view for displaying a list of objects.c                    |                                  | _        |                                 }|s|                     | j                  0t	          | j        d          r| j                                         }n| j         }|r+t          t          d          d| j        j	        iz            | 
                                }|                     |          S )Nexistsu9   Empty list and “%(class_name)s.allow_empty” is False.
class_name)r   r6   r,   r>   rH   r\   r   r5   r   r   rR   render_to_response)r   r0   argsr.   rE   is_emptyrS   s          r   r/   zBaseListView.get   s    ,,..**,, 	 ##D$455Ag (G GA  $/66888#// QRR$dn&=   ''))&&w///r   N)r   rT   rU   rV   r/   rO   r   r   rZ   rZ      s)        770 0 0 0 0r   rZ   c                   &     e Zd ZdZdZ fdZ xZS )#MultipleObjectTemplateResponseMixinz9Mixin for responding with a template and list of objects._listc                 V   	 t                                                      }n# t          $ r g }Y nw xY wt          | j        d          r>| j        j        j        }|                    |j        d|j	        | j
        d           n |st          dd| j        j        iz            |S )z
        Return a list of template names to be used for the request. Must return
        a list. May not be called if render_to_response is overridden.
        r   /z.htmlzg%(cls)s requires either a 'template_name' attribute or a get_queryset() method that returns a QuerySet.r   )rQ   get_template_namesr   rH   r6   r   rI   append	app_labelrJ   template_name_suffixr   r   )r   namesoptsr   s      r   rf   z6MultipleObjectTemplateResponseMixin.get_template_names   s    
	GG..00EE# 	 	 	 EEE	 4#W-- 	#)/DLL>>>4??D4M4M4MO     	&F 4>2   s    $ 33)r   rT   rU   rV   ri   rf   rW   rX   s   @r   rb   rb      sD        CC"        r   rb   c                       e Zd ZdZdS )ListViewz
    Render some list of objects, set by `self.model` or `self.queryset`.
    `self.queryset` can actually be any iterable of items, not just a queryset.
    N)r   rT   rU   rV   rO   r   r   rm   rm      s           r   rm   N)django.core.exceptionsr   django.core.paginatorr   r   django.db.modelsr   django.httpr   django.utils.translationr   r5   django.views.generic.baser	   r
   r   r   rZ   rb   rm   rO   r   r   <module>rt      sF   7 7 7 7 7 7 8 8 8 8 8 8 8 8 % % % % % %       1 1 1 1 1 1 O O O O O O O O O OJ3 J3 J3 J3 J3, J3 J3 J3Z0 0 0 0 0& 0 0 08# # # # #*? # # #L    2L     r   