Browse Source

Ref subnav para aceitar urls sem pk

a template tag subnav em sapl.base.templatetags.menu.py foi customizada
para aceitar que urls do request com ou sem pk possa ter subnav, bem como
as urls de dentro do yaml também não necessitarem de pk.
Para os casos em que a url do request não tenha pk, não basta a
existência do arquivo padrão subnav.yaml... mesmo que o subnav a ser
renderizado seja o padrão, a tamplate tag subnav só renderiza,
independente das condições, se existir a variável `subnav_template_name`
no contexto apontando qual o arquivo yaml deve ser renderizado...
Existem exemplos implemetandos dentro do projeto, faça uma busca por
subnav_template_name.
pull/737/merge
LeandroRoberto 8 years ago
parent
commit
4a05e60274
  1. 34
      sapl/base/templatetags/menus.py
  2. 2
      sapl/materia/views.py
  3. 1
      sapl/templates/materia/em_lote/acessorio.html
  4. 4
      sapl/templates/materia/em_lote/subnav.html
  5. 5
      sapl/templates/materia/em_lote/subnav_em_lote.yaml
  6. 1
      sapl/templates/materia/em_lote/tramitacao.html
  7. 9
      sapl/utils.py

34
sapl/base/templatetags/menus.py

@ -1,6 +1,10 @@
import yaml
from django import template from django import template
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
import yaml
from sapl.utils import sapl_logger
register = template.Library() register = template.Library()
@ -28,7 +32,7 @@ def subnav(context, path=None):
if obj: if obj:
root_pk = obj.pk root_pk = obj.pk
if root_pk: if root_pk or 'subnav_template_name' in context:
request = context['request'] request = context['request']
""" """
@ -64,7 +68,11 @@ def subnav(context, path=None):
menu = yaml.load(rendered) menu = yaml.load(rendered)
resolve_urls_inplace(menu, root_pk, rm, context) resolve_urls_inplace(menu, root_pk, rm, context)
except Exception as e: except Exception as e:
print(e) sapl_logger.error(_("""Erro na conversão do yaml %s. App: %s.
Erro:
%s
""") % (
yaml_path, rm.app_name, str(e)))
return {'menu': menu} return {'menu': menu}
@ -81,6 +89,7 @@ def resolve_urls_inplace(menu, pk, rm, context):
return list_active return list_active
else: else:
if 'url' in menu: if 'url' in menu:
url_name = menu['url'] url_name = menu['url']
if 'check_permission' in menu and not context[ if 'check_permission' in menu and not context[
@ -88,16 +97,27 @@ def resolve_urls_inplace(menu, pk, rm, context):
menu['url'] = '' menu['url'] = ''
menu['active'] = '' menu['active'] = ''
else: else:
menu['url'] = reverse( if ':' in url_name:
'%s:%s' % (rm.app_name, menu['url']), kwargs={'pk': pk}) try:
menu['url'] = reverse('%s' % menu['url'],
kwargs={'pk': pk})
except:
menu['url'] = reverse('%s' % menu['url'])
else:
try:
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 ''
if not menu['active']: if not menu['active']:
""" """
Se não encontrada diretamente, Se não encontrada diretamente,
procura a url acionada dentro do crud, caso seja um. procura a url acionada dentro do crud, caso seja um.
Serve para manter o active no suvnav correto ao acionar Serve para manter o active no subnav correto ao acionar
as funcionalidades diretas do MasterDetailCrud, como: as funcionalidades diretas do MasterDetailCrud, como:
- visualização de detalhes, adição, edição, remoção. - visualização de detalhes, adição, edição, remoção.
""" """

2
sapl/materia/views.py

@ -1336,6 +1336,8 @@ class PrimeiraTramitacaoEmLoteView(PermissionRequiredMixin, FilterView):
context = super(PrimeiraTramitacaoEmLoteView, context = super(PrimeiraTramitacaoEmLoteView,
self).get_context_data(**kwargs) self).get_context_data(**kwargs)
context['subnav_template_name'] = 'materia/em_lote/subnav_em_lote.yaml'
# Verifica se os campos foram preenchidos # Verifica se os campos foram preenchidos
if not self.filterset.form.is_valid(): if not self.filterset.form.is_valid():
return context return context

1
sapl/templates/materia/em_lote/acessorio.html

@ -1,7 +1,6 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n crispy_forms_tags %} {% load i18n crispy_forms_tags %}
{% block actions %}{% endblock %} {% block actions %}{% endblock %}
{% block sections_nav %}{% endblock %}
{% block detail_content %} {% block detail_content %}
{% if not filter_url %} {% if not filter_url %}

4
sapl/templates/materia/em_lote/subnav.html

@ -1,4 +0,0 @@
<ul class="nav nav-pills navbar-right">
<li class=""><a href="{% url 'sapl.materia:primeira_tramitacao_em_lote' %}">Primeira Tramitação</a></li>
<li class=""><a href="{% url 'sapl.materia:tramitacao_em_lote' %}">Tramitação em Lote</a></li>
</ul>

5
sapl/templates/materia/em_lote/subnav_em_lote.yaml

@ -0,0 +1,5 @@
{% load i18n common_tags %}
- title: {% trans 'Primeira Tramitação' %}
url: primeira_tramitacao_em_lote
- title: {% trans 'Tramitação em Lote' %}
url: tramitacao_em_lote

1
sapl/templates/materia/em_lote/tramitacao.html

@ -1,7 +1,6 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n crispy_forms_tags %} {% load i18n crispy_forms_tags %}
{% block actions %}{% endblock %} {% block actions %}{% endblock %}
{% block sections_nav %} {% include 'materia/em_lote/subnav.html'%} {% endblock sections_nav %}
{% block detail_content %} {% block detail_content %}
{% if not filter_url %} {% if not filter_url %}

9
sapl/utils.py

@ -1,9 +1,9 @@
import hashlib
from datetime import date from datetime import date
from functools import wraps from functools import wraps
from unicodedata import normalize as unicodedata_normalize from unicodedata import normalize as unicodedata_normalize
import hashlib
import logging
import magic
from django import forms from django import forms
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
@ -14,6 +14,11 @@ from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied, ValidationError from django.core.exceptions import PermissionDenied, ValidationError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from floppyforms import ClearableFileInput from floppyforms import ClearableFileInput
import magic
from sapl.settings import BASE_DIR
sapl_logger = logging.getLogger(BASE_DIR.name)
def normalize(txt): def normalize(txt):

Loading…
Cancel
Save