o 3a@@sddlZddlmZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z dd lmZdd lmZmZdd lmZmZdd lmZdd lmZddlmZddlmZmZmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(ddl)m*Z+ddl,m-Z-ddlm.Z.dZ/Gddde-Z0Gddde0Z1Gddde0Z2Gddde0Z3Gd d!d!e0Z4Gd"d#d#e0Z5Gd$d%d%e0Z6Gd&d'd'e0Z7Gd(d)d)e0Z8d*d+Z9d,d-Z:d3d/d0Z;d1d2ZEz9TemplateTagIndexView.get_context_data..tagztag:.nametitlebodymetalibrarytagsr1)r get_defaultr sortedtemplate_librariesitemstemplate_builtinsrNr parse_docstringr7 parse_rstrsplitappendr)r3)r+r.rNengineapp_libs builtin_libs module_namerMtag_nametag_funcrJrKmetadatakey tag_libraryr/r1r2r3<2    z%TemplateTagIndexView.get_context_datar4r5r6r%r3r8r1r1r/r2r;9r;cr:)TemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc r<) NcSr=r>r1r@r1r1r2rCdrDz.filterzfilter:rFrGrHfiltersr1)rrOr rPrQrRrSrfr rTr7rUrrVrWr)r3)r+r.rfrXrYrZr[rM filter_name filter_funcrJrKr^r_r`r/r1r2r3[raz(TemplateFilterIndexView.get_context_datarbr1r1r/r2rdXrcrdcr:) ViewIndexViewzadmin_doc/view_index.htmlc sg}ttj}t|j}|D]&\}}}}|t|t|d|p!g|r&|gp'gd|p.g|dqt j dii|d|iS)N:) full_nameurlurl_name namespacerIviewsr1) rr ROOT_URLCONFextract_views_from_urlpatterns urlpatternsrWrsimplify_regexjoinr)r3) r+r.rourlconfview_functionsfuncregexrnrIr/r1r2r3zs    zViewIndexView.get_context_datarbr1r1r/r2riwrcrics,eZdZdZeddZfddZZS)ViewDetailViewzadmin_doc/view_detail.htmlcCsht}t||r2t|\}}ztt||WSty1t|\}}ttt|||YSwdS)N)rr _is_callbackrgetattrr ImportError)viewrumodrwklassr1r1r2_get_view_funcs   zViewDetailView._get_view_funcc s|jd}||}|durtt|j\}}}|o%t|dtd|}|o2t|dtd|}|D]}t||dtd|||<q5tj dii|||||dS)Nr}zview:model)rIsummaryrKrLr1) r.rrr rTr7rUrr)r3)r+r.r} view_funcrJrKr^r_r/r1r2r3s"     zViewDetailView.get_context_data)r4r5r6r% staticmethodrr3r8r1r1r/r2rys  rycr:)ModelIndexViewzadmin_doc/model_index.htmlc s0ddtD}tjdii|d|iS)NcSsg|]}|jqSr1)_meta)rAmr1r1r2rCsz3ModelIndexView.get_context_data..rr1)r get_modelsr)r3)r+r.m_listr/r1r2r3szModelIndexView.get_context_datarbr1r1r/r2rrcrcr:)ModelDetailViewzadmin_doc/model_detail.htmlc s|jd}z t|jd}Wntyttd|jwz||}Wnty7ttd|jw|j}t |j \}}}|oPt |dtd|}|o]t |dtd|}g} |j D];} t | tjr| jjj} | jjjj} t td| | ddtd| } nt| } | j} | | j| | pd | jd qc|jD]J} | jjj} | jjjj} td | | d } | d | jdt td| dtd|jd| d| jdt td| dtd|jdqg}|jD]\}}t|st |trzt D] }|!|rt"qWn t"yYqw|j } | o2t t#| dtd|j} t |trH| |t$|| pCd dqt%|rft&|sft'|sf| |t$|| pad dqt(|}d)dd|D}|||| p|d dq|j*D]H}td |j+jj|j+jj,d } |-}| d |dt td| dtd|jd| d|dt td| dtd|jdqt.j/dii||j0||| |dS)N model_name app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrzmodel:z0the related `%(app_label)s.%(data_type)s` object)r data_typer?)rIrverbose help_textz/related `%(app_label)s.%(object_name)s` objects)r object_namez%s.allListzall %s)rIrrz%s.countIntegerz number of %sz, c Ss.g|]}d|dgtt|ddqS)=rrN)rtmaprepr)rAarg_elr1r1r2rCs z4ModelDetailView.get_context_data..)rI argumentsr)rIr descriptionfieldsmethodsr1)1r.rget_app_config LookupErrorrr get_modelrr rTr7rUr isinstancer ForeignKey remote_fieldrr4rget_readable_field_data_type verbose_namerWrIr many_to_manyr__dict__rRinspect isfunctionpropertyMODEL_METHODS_EXCLUDE startswith StopIterationrget_return_data_typerrrrrtrelated_objects related_modelrget_accessor_namer)r3label)r+r.r app_configroptsrJrKr^rfieldrrrr func_namerwexcluderprint_argumentsrelaccessorr/r1r2r3s                    z ModelDetailView.get_context_datarbr1r1r/r2rrcrcr:)TemplateDetailViewzadmin_doc/template_detail.htmlc  s|jd}g}zt}Wn tyYn)wt|jD]"\}}tt||}|r0| }nd}| ||||dqt j dii|||dS)Ntemplater?)fileexistscontentsorder)rI templatesr1) r.rrOr enumeratedirsrrr read_textrWr)r3) r+r.rrdefault_engineindex directory template_filetemplate_contentsr/r1r2r3Bs0      z#TemplateDetailView.get_context_datarbr1r1r/r2r?rcrcCs*|dr|dr dS|drdSdS)z9Return a somewhat-helpful data type given a function nameget__listr_countrr?)rendswith)rr1r1r2rds   rcCs |j|jS)z Return the description for a given field type, if it exists. Fields' descriptions can contain format strings, which will be interpolated with the values of field.__dict__ before being output. )rr)rr1r1r2rns rr?c Csg}|D]X}t|dr4z|j}Wn tyYqw|t||t|j|p'g|jr.|jgp/gqt|drUz||j |t|j||j fWqt yTYqwt t d||S)z Return a list of views from a list of urlpatterns. Each object in the returned list is a two-tuple: (view_func, regex) url_patternscallbackz,%s does not appear to be a urlpattern object)hasattrrr|extendrqstrpatternrnrWrrIr TypeErrorr)rrbasernroppatternsr1r1r2rqws*     $ rqcCsBt|}t|}|dddddd}|dsd|}|S)z Clean up urlpattern regexes into something more readable by humans. For example, turn "^(?P\w+)/athletes/(?P\w+)/$" into "//athletes//". ^r?$?/)r r replacer)rr1r1r2rss  rs)r?N)=r importlibrrpathlibr django.appsr django.confrdjango.contribr%django.contrib.admin.views.decoratorsrdjango.contrib.admindocsr django.contrib.admindocs.utilsr r django.core.exceptionsr r django.dbr django.httprdjango.template.enginer django.urlsrrrdjango.utils._osrdjango.utils.decoratorsrdjango.utils.inspectrrrrdjango.utils.translationrrdjango.views.genericrrrr#r9r;rdriryrrrrrrqrsr1r1r1r2sH                '%