Context processor for django admin app_list

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from django.conf import settings
from django.contrib import admin
from django.utils.safestring import mark_safe
from django.utils.text import capfirst

site = admin.site

def applist(request):
	app_dict = {}
	user = request.user
	for model, model_admin in site._registry.items():
		app_label = model._meta.app_label
		has_module_perms = user.has_module_perms(app_label)
		
		if has_module_perms:
			perms = model_admin.get_model_perms(request)
			
			if True in perms.values():
				model_dict = {
					'name': capfirst(model._meta.verbose_name_plural),
					'admin_url': mark_safe('/admin/%s/%s/' % (app_label, model.__name__.lower())),
					'perms': perms,
				}
				if app_label in app_dict:
					app_dict[app_label]['models'].append(model_dict)
				else:
					app_dict[app_label] = {
						'name': app_label.title(),
						'app_url': app_label + '/',
						'has_module_perms': has_module_perms,
						'models': [model_dict],
					}
					
	app_list = app_dict.values()
	app_list.sort(lambda x, y: cmp(x['name'], y['name']))
	return {'adm_app_list': app_list}

More like this

  1. Load static media from secure (SSL) static server (Context Processor) by ianreardon 3 years, 7 months ago
  2. Google Analytics Template Tag by jarofgreen 3 years, 10 months ago
  3. Paginator TemplateTag by trbs 5 years, 1 month ago
  4. Expose filtered settings to templates request context by n1k0 2 years, 5 months ago
  5. themed_template_loader by amitu 4 years, 2 months ago

Comments

gamesbook (on June 26, 2010):

Thanks - very useful... but my list of models is not sorted alphbetically?

#

cuciferus (on July 28, 2010):

very usefull Thanks! I'll just add something obvious, that for a beginner might take several hours to figure out(like me): replace app_list with adm_app_list in your admin/index.html

#

dimas_guilherme (on May 4, 2011):

I needed to change the line 29:

'app_url': app_label + '/', to 'app_url': '/admin/' + app_label + '/',

For the links to the apps to work. Check it!

#

(Forgotten your password?)