agateblue / agateblue/django-navutils
'str' object has no attribute 'is_viewable_by'
- 主要语言
- Python
- 星标
- 40
- 派生
- 11
- PR 合并指标
- 30 天内没有已合并 PR
描述
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
``` html
{% load navutils_tags %}
{% for menu_node in viewable_nodes %}
{% render_node node=material_top_menu_node user=user %}
{% endfor %}
```
node.html
``` html
{% load navutils_tags %}
##{% block node_label %}{{ node.label }}{% endblock %}
```
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。