Changeset 2554
- Timestamp:
- 03/24/06 10:13:57 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/magic-removal/django/contrib/admin/utils.py
r2043 r2554 83 83 def create_reference_role(rolename, urlbase): 84 84 def _role(name, rawtext, text, lineno, inliner, options={}, content=[]): 85 node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text )), **options)85 node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text.lower())), **options) 86 86 return [node], [] 87 87 docutils.parsers.rst.roles.register_canonical_role(rolename, _role) … … 89 89 def default_reference_role(name, rawtext, text, lineno, inliner, options={}, content=[]): 90 90 context = inliner.document.settings.default_reference_context 91 node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text )), **options)91 node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text.lower())), **options) 92 92 return [node], [] 93 93 django/branches/magic-removal/django/contrib/admin/views/doc.py
r2421 r2554 94 94 return missing_docutils_page(request) 95 95 96 views = [] 97 for site_settings_module in settings.ADMIN_FOR: 98 settings_mod = __import__(site_settings_module, '', '', ['']) 96 if settings.ADMIN_FOR: 97 settings_modules = [__import__(m, '', '', ['']) for m in settings.ADMIN_FOR] 98 else: 99 settings_modules = [settings] 100 101 views = [] 102 for settings_mod in settings_modules: 99 103 urlconf = __import__(settings_mod.ROOT_URLCONF, '', '', ['']) 100 104 view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns) … … 164 168 fields = [] 165 169 for field in opts.fields: 170 # ForeignKey is a special case since the field will actually be a 171 # descriptor that returns the other object 172 if isinstance(field, models.ForeignKey): 173 data_type = related_object_name = field.rel.to.__name__ 174 app_label = field.rel.to._meta.app_label 175 verbose = utils.parse_rst(("the related `%s.%s` object" % (app_label, data_type)), 'model', 'model:' + data_type) 176 else: 177 data_type = get_readable_field_data_type(field) 178 verbose = field.verbose_name 166 179 fields.append({ 167 180 'name': field.name, 168 'data_type': get_readable_field_data_type(field),169 'verbose': field.verbose_name,181 'data_type': data_type, 182 'verbose': verbose, 170 183 'help': field.help_text, 171 184 }) … … 188 201 'verbose': verbose, 189 202 }) 203 204 # Gather related objects 205 for rel in opts.get_all_related_objects(): 206 verbose = "related `%s.%s` objects" % (rel.opts.app_label, rel.opts.object_name) 207 accessor = rel.get_accessor_name() 208 fields.append({ 209 'name' : "%s.all" % accessor, 210 'verbose' : utils.parse_rst("all " + verbose , 'model', 'model:' + opts.module_name), 211 }) 212 fields.append({ 213 'name' : "%s.count" % accessor, 214 'verbose' : utils.parse_rst("number of " + verbose , 'model', 'model:' + opts.module_name), 215 }) 190 216 191 217 return render_to_response('admin_doc/model_detail', { … … 278 304 279 305 def get_readable_field_data_type(field): 280 # ForeignKey is a special case. Use the field type of the relation.281 if field.get_internal_type() == 'ForeignKey':282 field = field.rel.get_related_field()283 306 return DATA_TYPE_MAPPING[field.get_internal_type()] % field.__dict__ 284 307 … … 302 325 return views 303 326 304 # Clean up urlpattern regexes into something somewhat readable by Mere Humans:305 # turns something like "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$"306 # into "<sport_slug>/athletes/<athlete_slug>/"307 308 327 named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)') 328 non_named_group_matcher = re.compile(r'\(.*?\)') 309 329 310 330 def simplify_regex(pattern): 331 """ 332 Clean up urlpattern regexes into something somewhat readable by Mere Humans: 333 turns something like "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$" 334 into "<sport_slug>/athletes/<athlete_slug>/" 335 """ 336 # handle named groups first 311 337 pattern = named_group_matcher.sub(lambda m: m.group(1), pattern) 312 pattern = pattern.replace('^', '').replace('$', '').replace('?', '').replace('//', '/') 338 339 # handle non-named groups 340 pattern = non_named_group_matcher.sub("<var>", pattern) 341 342 # clean up any outstanding regex-y characters. 343 pattern = pattern.replace('^', '').replace('$', '').replace('?', '').replace('//', '/').replace('\\', '') 313 344 if not pattern.startswith('/'): 314 345 pattern = '/' + pattern
