Browse Source

Ref menus.py para renderizar urls sem arg root_pk

pull/701/head
LeandroRoberto 8 years ago
parent
commit
4ec74a8f78
  1. 79
      sapl/base/templatetags/menus.py

79
sapl/base/templatetags/menus.py

@ -1,6 +1,7 @@
import yaml
from django import template from django import template
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
import yaml
register = template.Library() register = template.Library()
@ -28,43 +29,42 @@ def subnav(context, path=None):
if obj: if obj:
root_pk = obj.pk root_pk = obj.pk
if root_pk: request = context['request']
request = context['request']
"""
As implementações das Views de Modelos que são dados auxiliares e
de diversas app's estão concentradas em urls com prefixo 'sistema'.
Essas Views não possuem submenu de navegação e são incompativeis com a
execução deste subnav. Inicialmente, a maneira mais prática encontrada
de isolar foi com o teste abaixo.
"""
rm = request.resolver_match
app_template = rm.app_name.rsplit('.', 1)[-1]
if path:
yaml_path = path
elif 'subnav_template_name' in context:
yaml_path = context['subnav_template_name']
else:
yaml_path = '%s/%s' % (app_template, 'subnav.yaml')
if not yaml_path:
return
try:
""" """
As implementações das Views de Modelos que são dados auxiliares e Por padrão, são carragados dois Loaders,
de diversas app's estão concentradas em urls com prefixo 'sistema'. filesystem.Loader - busca em TEMPLATE_DIRS do projeto atual
Essas Views não possuem submenu de navegação e são incompativeis com a app_directories.Loader - busca em todas apps instaladas
execução deste subnav. Inicialmente, a maneira mais prática encontrada A função nativa abaixo busca em todos os Loaders Configurados.
de isolar foi com o teste abaixo.
""" """
yaml_template = template.loader.get_template(yaml_path)
rm = request.resolver_match rendered = yaml_template.render()
app_template = rm.app_name.rsplit('.', 1)[-1] menu = yaml.load(rendered)
resolve_urls_inplace(menu, root_pk, rm, context)
if path: except Exception as e:
yaml_path = path print(e)
elif 'subnav_template_name' in context:
yaml_path = context['subnav_template_name']
else:
yaml_path = '%s/%s' % (app_template, 'subnav.yaml')
if not yaml_path:
return
try:
"""
Por padrão, são carragados dois Loaders,
filesystem.Loader - busca em TEMPLATE_DIRS do projeto atual
app_directories.Loader - busca em todas apps instaladas
A função nativa abaixo busca em todos os Loaders Configurados.
"""
yaml_template = template.loader.get_template(yaml_path)
rendered = yaml_template.render()
menu = yaml.load(rendered)
resolve_urls_inplace(menu, root_pk, rm, context)
except Exception as e:
print(e)
return {'menu': menu} return {'menu': menu}
@ -88,8 +88,13 @@ def resolve_urls_inplace(menu, pk, rm, context):
menu['url'] = '' menu['url'] = ''
menu['active'] = '' menu['active'] = ''
else: else:
menu['url'] = reverse( try:
'%s:%s' % (rm.app_name, menu['url']), kwargs={'pk': pk}) menu['url'] = reverse('%s:%s' % (
rm.app_name, menu['url']),
kwargs={'pk': pk})
except:
menu['url'] = reverse('%s:%s' % (rm.app_name, menu['url']))
menu['active'] = 'active'\ menu['active'] = 'active'\
if context['request'].path == menu['url'] else '' if context['request'].path == menu['url'] else ''

Loading…
Cancel
Save