Skip to content

'str' object has no attribute 'is_viewable_by' #3

Description

@SoulRaven

New error:
Environment:

Request Method: GET

Django Version: 1.8.4
Python Version: 2.7.9
Installed Applications:
('material',
'material.frontend',
'admin_tools',
'admin_tools.theming',
'admin_tools.menu',
'admin_tools.dashboard',
'django.contrib.auth',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admindocs',
'django_extensions',
'navutils',
'djcopyright',
'registration',
'watchman',
'rest_framework',
'rest_framework_swagger',
'main_core_api',
'geotools',
'tiny_url',
'dashboard_main',
'debug_toolbar')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'material.frontend.middleware.SmoothNavigationMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware')

Template error:
In template /mnt/usb500G/pyProjectsEnv/proGeekAPI/dashboard_main/templates/materials/navutil/material_top_menu.html, error at line 4
'str' object has no attribute 'is_viewable_by'

1 : {% load navutils_tags %}

2 :

3 : {% for menu_node in viewable_nodes %}

4 : {% render_node node=material_top_menu_node user=request.user %}

5 : {% endfor %}

6 :

Traceback:
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response

  1.                 response = wrapped_callback(request, _callback_args, *_callback_kwargs)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekAPI/dashboard_main/views.py" in index
  2. return render(request, 'home.html')
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/shortcuts.py" in render
  3.         template_name, context, request=request, using=using)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  4.     return template.render(context, request)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/backends/django.py" in render
  5.     return self.template.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  6.                 return self._render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  7. return self.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  8.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  9.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  10.     return compiled_parent._render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  11. return self.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  12.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  13.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  14.     return compiled_parent._render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  15. return self.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  16.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  17.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  18.             result = block.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  19.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  20.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  21.             return template.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  22.             return self._render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  23. return self.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  24.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  25.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  26.                 return func(_resolved_args, *_resolved_kwargs)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/navutils/templatetags/navutils_tags.py" in render_menu
  27. return t.render(template.Context(final_context))
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/backends/django.py" in render
  28.     return self.template.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  29.                 return self._render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  30. return self.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  31.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  32.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  33.                         nodelist.append(node.render(context))
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  34.                 return func(_resolved_args, *_resolved_kwargs)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/navutils/templatetags/navutils_tags.py" in render_node
  35. return t.render(template.Context(final_context))
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/backends/django.py" in render
  36.     return self.template.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  37.                 return self._render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  38. return self.nodelist.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  39.             bit = self.render_node(node, context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  40.         return node.render(context)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  41.                         nodelist.append(node.render(context))
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
  42.                 return func(_resolved_args, *_resolved_kwargs)
    
    File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/navutils/templatetags/navutils_tags.py" in render_node
  43. if not node.is_viewable_by(user, context):
    

Exception Type: AttributeError at /
Exception Value: 'str' object has no attribute 'is_viewable_by'

menu.py
from navutils import menu

main_menu = menu.Menu('main')
menu.register(main_menu)

will be shown to everybody

blog = menu.Node(
id='blog',
label='Blog',
pattern_name='api:index',
template='materials/navutil/material_top_menu.html',
)
main_menu.register(blog)

nodes created with a pattern_name argument will use django reverse

assert blog.get_url() == '/'

if you want to disable reversion, use the url argument

django = menu.Node(
id='django',
label='Django project',
url='http://djangoproject.com',
link_attrs={'target': '_blank'}
)

Each node instance can accept an arbitrary number of children

blog.add(
menu.Node(
id='last_entries',
label='Last entries',
pattern_name='api:index'
)
)
blog.add(
menu.Node(
id='archives',
label='Archives',
pattern_name='api:index'
)
)

menu.html

{% load navutils_tags %}
<nav class="android-navigation mdl-navigation {{ menu.id }}-menu">
    {% for menu_node in viewable_nodes %}
       {% render_node node=material_top_menu_node user=user %}
    {% endfor %}
</nav>

node.html

{% load navutils_tags %}
##<a href="{{ node.get_url }}"{% for attr, value in node.link_attrs.items %} {{ attr }}="{{ value }}"{% endfor %}>{% block node_label %}{{ node.label }}{% endblock %}</a>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions