modified website.decorators, webpage->app_config, created new configs
This commit is contained in:
@@ -5,16 +5,19 @@ def _insert_bases(cls, bases):
|
||||
new_bases = tuple(bases) + old_bases
|
||||
cls.__bases__ = new_bases
|
||||
|
||||
def webpage(**options):
|
||||
""" Class decorators that insert needed bases according to options :
|
||||
def app_config(**options):
|
||||
""" Insert per-application configuration options :
|
||||
-- name : name of the app to register under in navbar
|
||||
-- groups : user groups needed to access this application
|
||||
-- menu : user menu templates to be used
|
||||
-- admin_menu : admin menu templates, only appear for superuser
|
||||
-- ajax : view will return content_template for Ajax requests
|
||||
-- permissions : list of permissions needed to access view
|
||||
"""
|
||||
name = options.pop('name', None)
|
||||
groups = options.pop('groups', []) #Transition from app_users
|
||||
menu = options.pop('menu', [])
|
||||
admin_menu = options.pop('admin_menu', [])
|
||||
ajax = options.pop('ajax', False)
|
||||
permissions = options.pop('permissions', [])
|
||||
app_menu = options.pop('app_menu', [])
|
||||
app_name = options.pop('app_name', None)
|
||||
app_users = options.pop('app_users', [])
|
||||
|
||||
new_bases = []
|
||||
if ajax:
|
||||
@@ -22,18 +25,15 @@ def webpage(**options):
|
||||
else:
|
||||
new_bases.append(WebsiteTemplateMixin)
|
||||
|
||||
if permissions:
|
||||
new_bases.append(PermissionRequiredMixin)
|
||||
if app_users:
|
||||
if groups: #TODO: use group instaed of user class
|
||||
new_bases.append(SpecialUserRequiredMixin)
|
||||
|
||||
def class_decorator(cls):
|
||||
_insert_bases(cls, new_bases)
|
||||
if permissions:
|
||||
cls.permissions = permissions
|
||||
cls.app_menu = app_menu.copy() #avoid conflict between Views
|
||||
cls.app_name = app_name
|
||||
cls.app_users = app_users.copy()
|
||||
cls._user_menu = menu
|
||||
cls._admin_menu = admin_menu
|
||||
cls.app_name = name
|
||||
cls.app_users = groups.copy()
|
||||
return cls
|
||||
|
||||
return class_decorator
|
||||
|
||||
@@ -70,7 +70,12 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
||||
"""
|
||||
base_template = "base_site.html"
|
||||
content_template = None
|
||||
|
||||
app_name = None
|
||||
_user_menu = []
|
||||
_admin_menu = []
|
||||
_groups = []
|
||||
|
||||
|
||||
class Configuration:
|
||||
stylesheets = ['base.css']
|
||||
@@ -147,16 +152,15 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
||||
self._active_app = self.get_active_app()
|
||||
return self._active_app
|
||||
|
||||
def get_menu(self):
|
||||
@property
|
||||
def menu(self):
|
||||
""" Renvoie la liste des templates utilisés comme menu pour l'application
|
||||
active
|
||||
"""
|
||||
return self.app_menu
|
||||
if not self.request.user.is_superuser:
|
||||
return self._user_menu
|
||||
return self._user_menu + self._admin_menu
|
||||
|
||||
def insert_menu(self, template_name):
|
||||
""" Insert menu at beginning of self.app_menu """
|
||||
if not template_name in self.app_menu:
|
||||
self.app_menu.insert(0, template_name)
|
||||
|
||||
def _update_context_with_rendered_blocks(self, context):
|
||||
""" Render text for existing PageInfo attributes.
|
||||
@@ -178,7 +182,7 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
||||
context = user_processor(self.request, context)
|
||||
#Webpage
|
||||
context['content_template'] = self.get_content_template()
|
||||
context['app_menu'] = self.get_menu()
|
||||
context['app_menu'] = self.menu
|
||||
return context
|
||||
|
||||
class WebsiteAjaxTemplateMixin(WebsiteTemplateMixin):
|
||||
|
||||
Reference in New Issue
Block a user