Package django :: Package contrib :: Package admin :: Package views :: Module doc
[hide private]
[frames] | no frames]

Source Code for Module django.contrib.admin.views.doc

  1  from django import template, templatetags 
  2  from django.template import RequestContext 
  3  from django.conf import settings 
  4  from django.contrib.admin.views.decorators import staff_member_required 
  5  from django.db import models 
  6  from django.shortcuts import render_to_response 
  7  from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist 
  8  from django.http import Http404 
  9  from django.core import urlresolvers 
 10  from django.contrib.admin import utils 
 11  from django.contrib.sites.models import Site 
 12  from django.utils.translation import ugettext as _ 
 13  from django.utils.safestring import mark_safe 
 14  import inspect, os, re 
 15   
 16  # Exclude methods starting with these strings from documentation 
 17  MODEL_METHODS_EXCLUDE = ('_', 'add_', 'delete', 'save', 'set_') 
 18   
19 -class GenericSite(object):
20 domain = 'example.com' 21 name = 'my site'
22
23 -def doc_index(request):
24 if not utils.docutils_is_available: 25 return missing_docutils_page(request) 26 return render_to_response('admin_doc/index.html', context_instance=RequestContext(request))
27 doc_index = staff_member_required(doc_index) 28
29 -def bookmarklets(request):
30 # Hack! This couples this view to the URL it lives at. 31 admin_root = request.path[:-len('doc/bookmarklets/')] 32 return render_to_response('admin_doc/bookmarklets.html', { 33 'admin_url': mark_safe("%s://%s%s" % (request.is_secure() and 'https' or 'http', request.get_host(), admin_root)), 34 }, context_instance=RequestContext(request))
35 bookmarklets = staff_member_required(bookmarklets) 36
37 -def template_tag_index(request):
38 if not utils.docutils_is_available: 39 return missing_docutils_page(request) 40 41 load_all_installed_template_libraries() 42 43 tags = [] 44 for module_name, library in template.libraries.items(): 45 for tag_name, tag_func in library.tags.items(): 46 title, body, metadata = utils.parse_docstring(tag_func.__doc__) 47 if title: 48 title = utils.parse_rst(title, 'tag', _('tag:') + tag_name) 49 if body: 50 body = utils.parse_rst(body, 'tag', _('tag:') + tag_name) 51 for key in metadata: 52 metadata[key] = utils.parse_rst(metadata[key], 'tag', _('tag:') + tag_name) 53 if library in template.builtins: 54 tag_library = None 55 else: 56 tag_library = module_name.split('.')[-1] 57 tags.append({ 58 'name': tag_name, 59 'title': title, 60 'body': body, 61 'meta': metadata, 62 'library': tag_library, 63 }) 64 65 return render_to_response('admin_doc/template_tag_index.html', {'tags': tags}, context_instance=RequestContext(request))
66 template_tag_index = staff_member_required(template_tag_index) 67
68 -def template_filter_index(request):
69 if not utils.docutils_is_available: 70 return missing_docutils_page(request) 71 72 load_all_installed_template_libraries() 73 74 filters = [] 75 for module_name, library in template.libraries.items(): 76 for filter_name, filter_func in library.filters.items(): 77 title, body, metadata = utils.parse_docstring(filter_func.__doc__) 78 if title: 79 title = utils.parse_rst(title, 'filter', _('filter:') + filter_name) 80 if body: 81 body = utils.parse_rst(body, 'filter', _('filter:') + filter_name) 82 for key in metadata: 83 metadata[key] = utils.parse_rst(metadata[key], 'filter', _('filter:') + filter_name) 84 if library in template.builtins: 85 tag_library = None 86 else: 87 tag_library = module_name.split('.')[-1] 88 filters.append({ 89 'name': filter_name, 90 'title': title, 91 'body': body, 92 'meta': metadata, 93 'library': tag_library, 94 }) 95 return render_to_response('admin_doc/template_filter_index.html', {'filters': filters}, context_instance=RequestContext(request))
96 template_filter_index = staff_member_required(template_filter_index) 97
98 -def view_index(request):
99 if not utils.docutils_is_available: 100 return missing_docutils_page(request) 101 102 if settings.ADMIN_FOR: 103 settings_modules = [__import__(m, {}, {}, ['']) for m in settings.ADMIN_FOR] 104 else: 105 settings_modules = [settings] 106 107 views = [] 108 for settings_mod in settings_modules: 109 urlconf = __import__(settings_mod.ROOT_URLCONF, {}, {}, ['']) 110 view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns) 111 if Site._meta.installed: 112 site_obj = Site.objects.get(pk=settings_mod.SITE_ID) 113 else: 114 site_obj = GenericSite() 115 for (func, regex) in view_functions: 116 views.append({ 117 'name': func.__name__, 118 'module': func.__module__, 119 'site_id': settings_mod.SITE_ID, 120 'site': site_obj, 121 'url': simplify_regex(regex), 122 }) 123 return render_to_response('admin_doc/view_index.html', {'views': views}, context_instance=RequestContext(request))
124 view_index = staff_member_required(view_index) 125
126 -def view_detail(request, view):
127 if not utils.docutils_is_available: 128 return missing_docutils_page(request) 129 130 mod, func = urlresolvers.get_mod_func(view) 131 try: 132 view_func = getattr(__import__(mod, {}, {}, ['']), func) 133 except (ImportError, AttributeError): 134 raise Http404 135 title, body, metadata = utils.parse_docstring(view_func.__doc__) 136 if title: 137 title = utils.parse_rst(title, 'view', _('view:') + view) 138 if body: 139 body = utils.parse_rst(body, 'view', _('view:') + view) 140 for key in metadata: 141 metadata[key] = utils.parse_rst(metadata[key], 'model', _('view:') + view) 142 return render_to_response('admin_doc/view_detail.html', { 143 'name': view, 144 'summary': title, 145 'body': body, 146 'meta': metadata, 147 }, context_instance=RequestContext(request))
148 view_detail = staff_member_required(view_detail) 149
150 -def model_index(request):
151 if not utils.docutils_is_available: 152 return missing_docutils_page(request) 153 154 m_list = [m._meta for m in models.get_models()] 155 return render_to_response('admin_doc/model_index.html', {'models': m_list}, context_instance=RequestContext(request))
156 model_index = staff_member_required(model_index) 157
158 -def model_detail(request, app_label, model_name):
159 if not utils.docutils_is_available: 160 return missing_docutils_page(request) 161 162 # Get the model class. 163 try: 164 app_mod = models.get_app(app_label) 165 except ImproperlyConfigured: 166 raise Http404, _("App %r not found") % app_label 167 model = None 168 for m in models.get_models(app_mod): 169 if m._meta.object_name.lower() == model_name: 170 model = m 171 break 172 if model is None: 173 raise Http404, _("Model %(name)r not found in app %(label)r") % {'name': model_name, 'label': app_label} 174 175 opts = model._meta 176 177 # Gather fields/field descriptions. 178 fields = [] 179 for field in opts.fields: 180 # ForeignKey is a special case since the field will actually be a 181 # descriptor that returns the other object 182 if isinstance(field, models.ForeignKey): 183 data_type = related_object_name = field.rel.to.__name__ 184 app_label = field.rel.to._meta.app_label 185 verbose = utils.parse_rst((_("the related `%(label)s.%(type)s` object") % {'label': app_label, 'type': data_type}), 'model', _('model:') + data_type) 186 else: 187 data_type = get_readable_field_data_type