Support named links, add templatetags to get menus, links and resolve them.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-09-16 21:12:09 -04:00
parent e6eebe11a7
commit 51cf39f4d8
2 changed files with 32 additions and 2 deletions

View File

@@ -293,10 +293,20 @@ class Menu(object):
class Link(object):
_registry = {}
@classmethod
def get(cls, name):
return cls._registry[name]
@classmethod
def remove(cls, name):
del cls._registry[name]
def __init__(self, text, view=None, args=None, condition=None,
conditional_disable=None, description=None, html_data=None,
html_extra_classes=None, icon=None, icon_class=None,
keep_query=False, kwargs=None, permissions=None,
keep_query=False, kwargs=None, name=None, permissions=None,
permissions_related=None, remove_from_query=None, tags=None,
url=None):
@@ -310,6 +320,7 @@ class Link(object):
self.icon_class = icon_class
self.keep_query = keep_query
self.kwargs = kwargs or {}
self.name = name
self.permissions = permissions or []
self.permissions_related = permissions_related
self.remove_from_query = remove_from_query or []
@@ -318,6 +329,9 @@ class Link(object):
self.view = view
self.url = url
if name:
self.__class__._registry[name] = self
def resolve(self, context, resolved_object=None):
AccessControlList = apps.get_model(
app_label='acls', model_name='AccessControlList'

View File

@@ -2,12 +2,22 @@ from __future__ import unicode_literals
from django.template import Library
from ..classes import Menu, SourceColumn
from ..classes import Link, Menu, SourceColumn
from ..forms import MultiItemForm
register = Library()
@register.simple_tag()
def get_link(name):
return Link.get(name)
@register.simple_tag()
def get_menu(name):
return Menu.get(name)
@register.simple_tag(takes_context=True)
def get_menu_links(context, name, source=None, sort_results=None):
return Menu.get(name).resolve(context=context, source=source, sort_results=sort_results)
@@ -60,6 +70,12 @@ def get_source_columns(source):
return SourceColumn.get_for_source(source)
@register.simple_tag(takes_context=True)
def resolve_link(context, link):
# This can be used to resolve links or menus too
return link.resolve(context=context)
@register.simple_tag(takes_context=True)
def source_column_resolve(context, column):
context['column_result'] = column.resolve(context=context)