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
17 MODEL_METHODS_EXCLUDE = ('_', 'add_', 'delete', 'save', 'set_')
18
22
27 doc_index = staff_member_required(doc_index)
28
35 bookmarklets = staff_member_required(bookmarklets)
36
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
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
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
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
156 model_index = staff_member_required(model_index)
157