Installed grappelli inline with the source
This commit is contained in:
67
3rd_party_apps/grappelli/admin.py
Executable file
67
3rd_party_apps/grappelli/admin.py
Executable file
@@ -0,0 +1,67 @@
|
||||
# coding: utf-8
|
||||
|
||||
# DJANGO IMPORTS
|
||||
from django.contrib import admin
|
||||
from django.contrib.admin import sites
|
||||
from django.contrib.admin import ModelAdmin
|
||||
|
||||
from django.utils.functional import update_wrapper
|
||||
from django.views.decorators.csrf import csrf_protect
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views.decorators.cache import never_cache
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class AdminSite(sites.AdminSite):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.grappelli_title = kwargs.pop('title', 'Grappelli')
|
||||
self.grappelli_headline = kwargs.pop('headline', 'Grappelli')
|
||||
super(AdminSite, self).__init__(*args, **kwargs)
|
||||
|
||||
def annotate_context(self, extra_context):
|
||||
extra_context = extra_context or {}
|
||||
extra_context.update({
|
||||
'grappelli_admin_title': self.grappelli_title,
|
||||
'grappelli_admin_headline': self.grappelli_headline,
|
||||
})
|
||||
return extra_context
|
||||
|
||||
def admin_view(self, view, cacheable=False):
|
||||
# not everything can take extra_context
|
||||
excludes = [
|
||||
'password_change',
|
||||
'password_change_done',
|
||||
'i18n_javascript',
|
||||
'login',
|
||||
'logout',
|
||||
'user_change_password',
|
||||
]
|
||||
def inner(request, *args, **kwargs):
|
||||
if not self.has_permission(request):
|
||||
return self.login(request)
|
||||
if view.__name__ not in excludes:
|
||||
extra_context = kwargs.get('extra_context', {})
|
||||
extra_context = self.annotate_context(extra_context)
|
||||
kwargs['extra_context'] = extra_context
|
||||
return view(request, *args, **kwargs)
|
||||
if not cacheable:
|
||||
inner = never_cache(inner)
|
||||
# We add csrf_protect here so this function can be used as a utility
|
||||
# function for any view, without having to repeat 'csrf_protect'.
|
||||
if not getattr(view, 'csrf_exempt', False):
|
||||
inner = csrf_protect(inner)
|
||||
return update_wrapper(inner, view)
|
||||
|
||||
|
||||
class RelatedLookupAdmin(admin.ModelAdmin):
|
||||
|
||||
def has_change_permission(self, request, obj=None):
|
||||
if not obj:
|
||||
opts = self.opts
|
||||
if request.user.has_perm(opts.app_label + '.view_' + opts.object_name.lower()):
|
||||
return True
|
||||
return super(RelatedLookupAdmin, self).has_change_permission(request, obj)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user