
    h                         S SK Jr  S SKJrJr  S SKJr  S SKJr  S SK	J
r  S SKJrJrJr   " S S\5      r " S	 S
\\5      r " S S\5      r " S S\\5      rg)    )ImproperlyConfigured)InvalidPage	Paginator)QuerySet)Http404)gettext)ContextMixinTemplateResponseMixinViewc                      ^  \ rS rSrSrSrSrSrSrSr	Sr
\rSrSrS rS rS	 rS
 r SS jrS rS rS rSS.U 4S jjrSrU =r$ )MultipleObjectMixin	   z0A mixin for views manipulating multiple objects.TNr   pagec                    U R                   b2  U R                   n[        U[        5      (       a  UR                  5       nOVU R                  b%  U R                  R
                  R                  5       nO$[        SSU R                  R                  0-  5      eU R                  5       nU(       a'  [        U[        5      (       a  U4nUR                  " U6 nU$ )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.
zj%(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      K/var/www/html/env/lib/python3.13/site-packages/django/views/generic/list.pyget_queryset MultipleObjectMixin.get_queryset   s     ==$}}H(H--#<<>ZZ#zz22668H&*-2DNN4K4K,LM 
 $$&(C(($;(((3H    c                     U R                   $ )z<Return the field or fields to use for ordering the queryset.)r   r   s    r   r    MultipleObjectMixin.get_ordering1   s    }}r!   c                 b   U R                  UUU R                  5       U R                  5       S9nU R                  nU R                  R                  U5      =(       d.    U R                  R                  R                  U5      =(       d    Sn [        U5      n UR                  U5      nX5UR                  UR                  5       4$ ! [         a)    US:X  a  UR                  n NM[        [        S5      5      ef = f! [          a(  n[        [        S5      U[#        U5      S.-  5      eSnAff = f)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	paginatorr0   r   r+   es           r   paginate_queryset%MultipleObjectMixin.paginate_queryset5   s!   &&--/#'#7#7#9	 ' 
	 __
{{z*Sdll.>.>.B.B:.NSRS	d)K	>>+.DT%5%5t7K7K7MNN  	v~'11RS 		  	?@"-#a&AB 	s*   C -C< C9$C9<
D.#D))D.c                     U R                   $ )zH
Get the number of items to paginate by, or ``None`` for no pagination.
)paginate_by)r   r   s     r   get_paginate_by#MultipleObjectMixin.get_paginate_byQ   s     r!   c                 0    U R                   " UU4UUS.UD6$ )z2Return an instance of the paginator for this view.r&   )paginator_class)r   r   per_pager'   r(   r1   s         r   r-   !MultipleObjectMixin.get_paginatorW   s4     ##
 #9	

 
 	
r!   c                     U R                   $ )zO
Return the maximum number of orphans extend the last page by when
paginating.
)paginate_orphansr#   s    r   r.   (MultipleObjectMixin.get_paginate_orphansc   s    
 $$$r!   c                     U R                   $ )zi
Return ``True`` if the view should display empty lists and ``False``
if a 404 should be raised instead.
)allow_emptyr#   s    r   r/   #MultipleObjectMixin.get_allow_emptyj   s    
 r!   c                     U R                   (       a  U R                   $ [        US5      (       a#  SUR                  R                  R                  -  $ g)z3Get the name of the item to be used in the context.r   z%s_listN)context_object_namehasattrr   _meta
model_name)r   r9   s     r   get_context_object_name+MultipleObjectMixin.get_context_object_nameq   sD    ##+++['**{0066AAAAr!   r9   c                  > Ub  UOU R                   nU R                  U5      nU R                  U5      nU(       a  U R                  X45      u  pgp8UUUUS.n	OSSSUS.n	Ub  X9U'   U	R	                  U5        [
        T
U ]  " S0 U	D6$ )zGet the context for this view.N)r<   page_objis_paginatedr9   F )r9   rB   rS   r>   updatesuperget_context_data)r   r9   r1   r   r;   rO   r<   r   rX   contextr   s             r   r\   $MultipleObjectMixin.get_context_dataz   s    "-"9;t?O?O((2	"::8D6:6L6L73IX '  ,'	G "  %'	G *+3'(vw'2'22r!   rY   )r   T)r   
__module____qualname____firstlineno____doc__rL   r   r   rA   rI   rO   r   rE   r0   r   r   r   r>   rB   r-   r.   r/   rS   r\   __static_attributes____classcell__r   s   @r   r   r   	   ss    :KHEKOJH68  EI

%  /3 3 3r!   r   c                       \ rS rSrSrS rSrg)BaseListView   z-A base view for displaying a list of objects.c                    U R                  5       U l        U R                  5       nU(       d  U R                  U R                  5      b;  [	        U R                  S5      (       a   U R                  R                  5       (       + nOU R                  (       + nU(       a-  [        [        S5      SU R                  R                  0-  5      eU R                  5       nU R                  U5      $ )Nexistsu9   Empty list and “%(class_name)s.allow_empty” is False.
class_name)r   r9   r/   rB   rP   rj   r   r8   r   r   r\   render_to_response)r   r3   argsr1   rL   is_emptyr]   s          r   r2   BaseListView.get   s    ,,.**, ##D$4$45Ag  (G G  $//6688#///QR$dnn&=&=  '')&&w//r!   rU   N)r   r_   r`   ra   rb   r2   rc   rY   r!   r   rg   rg      s
    70r!   rg   c                   0   ^  \ rS rSrSrSrU 4S jrSrU =r$ )#MultipleObjectTemplateResponseMixin   z9Mixin for responding with a template and list of objects._listc                   >  [         TU ]  5       n[        U R                  S5      (       a\  U R                  R
                  R                  nUR                  UR                  < SUR                  < U R                  < S35        U$ U(       d$  [        SSU R                  R                  0-  5      eU$ ! [         a    / n Nf = f)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   )r[   get_template_namesr   rP   r9   r   rQ   append	app_labelrR   template_name_suffixr   r   )r   namesoptsr   s      r   rv   6MultipleObjectTemplateResponseMixin.get_template_names   s    
	G.0E 4##W--##))//DLL>>4??D4M4MO  &F 4>>22  / $ 	 E	s   B5 5CCrY   )	r   r_   r`   ra   rb   ry   rv   rc   rd   re   s   @r   rq   rq      s    C" r!   rq   c                       \ rS rSrSrSrg)ListView   z
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.
rY   N)r   r_   r`   ra   rb   rc   rY   r!   r   r~   r~      s    r!   r~   N)django.core.exceptionsr   django.core.paginatorr   r   django.db.modelsr   django.httpr   django.utils.translationr   r8   django.views.generic.baser	   r
   r   r   rg   rq   r~   rY   r!   r   <module>r      sU    7 8 %  1 O OJ3, J3Z0& 08#*? #L2L r!   