agateblue / django-navutils Goto Github PK
View Code? Open in Web Editor NEWA lightweight package for handling menus and breadcrumbs in your django project
License: BSD 3-Clause "New" or "Revised" License
A lightweight package for handling menus and breadcrumbs in your django project
License: BSD 3-Clause "New" or "Revised" License
Hello,
i have try to install the app but i get this error (http://dpaste.com/3FW74F8):
Environment:
Request Method: GET
Request URL: http://progeek.go.ro/
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/fragments/material_top_header.html, error at line 20
'str' object has no attribute 'values'
10 : <div class="android-search-box mdl-textfield mdl-js-textfield mdl-textfield--expandable mdl-textfield--floating-label mdl-textfield--align-right mdl-textfield--full-width">
11 : <label class="mdl-button mdl-js-button mdl-button--icon" for="search-field">
12 : <i class="material-icons">search</i>
13 : </label>
14 : <div class="mdl-textfield__expandable-holder">
15 : <input class="mdl-textfield__input" type="text" id="search-field" />
16 : </div>
17 : </div>
18 : <!-- Navigation -->
19 : <div class="android-navigation-container">
20 : {% render_menu menu=menus.main user=request.user %}
21 : </div>
22 : <button class="android-more-button mdl-button mdl-js-button mdl-button--icon mdl-js-ripple-effect" id="more-button">
23 : <i class="material-icons">more_vert</i>
24 : </button>
25 : <ul class="mdl-menu mdl-js-menu mdl-menu--bottom-right mdl-js-ripple-effect" for="more-button">
26 : <li class="mdl-menu__item">5.0 Lollipop</li>
27 : <li class="mdl-menu__item">4.4 KitKat</li>
28 : <li disabled class="mdl-menu__item">4.3 Jelly Bean</li>
29 : <li class="mdl-menu__item">Android History</li>
30 : </ul>
Traceback:
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/mnt/usb500G/pyProjectsEnv/proGeekAPI/dashboard_main/views.py" in home
7. return render(request, 'home.html')
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/shortcuts.py" in render
67. 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
99. return template.render(context, request)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/backends/django.py" in render
74. return self.template.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
209. return self._render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
96. return self.nodelist.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
903. bit = self.render_node(node, context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
79. return node.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
135. return compiled_parent._render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
96. return self.nodelist.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
903. bit = self.render_node(node, context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
79. return node.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
135. return compiled_parent._render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
96. return self.nodelist.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
903. bit = self.render_node(node, context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
79. return node.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
65. result = block.nodelist.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
903. bit = self.render_node(node, context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
79. return node.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
159. return template.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
211. return self._render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
96. return self.nodelist.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
903. bit = self.render_node(node, context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
79. return node.render(context)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/template/base.py" in render
1195. 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
20. viewable_nodes = [node for node in menu.values() if node.is_viewable_by(user, context)]
Exception Type: AttributeError at /
Exception Value: 'str' object has no attribute 'values'
i have put the menu.py inside my app dir, but i guess the app is not searching right for the menu.py file location,
can you help me?
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
response = wrapped_callback(request, _callback_args, *_callback_kwargs)
template_name, context, request=request, using=using)
return template.render(context, request)
return self.template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return compiled_parent._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return compiled_parent._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
result = block.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return func(_resolved_args, *_resolved_kwargs)
return t.render(template.Context(final_context))
return self.template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
nodelist.append(node.render(context))
return func(_resolved_args, *_resolved_kwargs)
return t.render(template.Context(final_context))
return self.template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
nodelist.append(node.render(context))
return func(_resolved_args, *_resolved_kwargs)
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)
blog = menu.Node(
id='blog',
label='Blog',
pattern_name='api:index',
template='materials/navutil/material_top_menu.html',
)
main_menu.register(blog)
assert blog.get_url() == '/'
django = menu.Node(
id='django',
label='Django project',
url='http://djangoproject.com',
link_attrs={'target': '_blank'}
)
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>
When specifying a customer AppConfig in one's package, and adding the INSTALLED_APPS
like
INSTALLED_APPS = [
...
'my_app.apps.CustomAppConfig',
...
]
The autodiscover
method with bork with
ModuleNotFoundError: No module named 'my_app.apps.CustomAppConfig'; 'my_app.apps' is not a package
This method of specifying the INSTALLED_APPS
as above can be expected in any Django >= 1.7 application (https://docs.djangoproject.com/en/2.1/ref/applications/#configuring-applications). The obvious workaround for users is to specify a default_app_config
, however you can't always expect users to be able to do that, especially if they configure multiple AppConfig's.
I think there's only one deprecated item - that is easy to fix.
Will also need to update tox to include tests for django3.2 and python 3.8 / 3.9
Consider removing support for python2.x, < python3.7, <django2.2 ?
I am assembling a pull request - let me know if you'd like me to include removing support for unsupported versions, otherwise I'll just add support for django3.2 and python3.8, 3.9
a new error is rised:
Traceback (most recent call last):
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
worker.init_process()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/workers/ggevent.py", line 192, in init_process
super(GeventWorker, self).init_process()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
self.wsgi = self.app.wsgi()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
__import__(module)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gevent/builtins.py", line 58, in __import__
result = _import(*args, **kwargs)
File "/mnt/usb500G/pyProjectsEnv/proGeekAPI/proGeekAPI/wsgi.py", line 16, in <module>
application = get_wsgi_application()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/apps/registry.py", line 115, in populate
app_config.ready()
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/navutils/apps.py", line 10, in ready
menu.registry.autodiscover(settings.INSTALLED_APPS)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/persisting_theory/registries.py", line 107, in autodiscover
module = __import__(package)
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/gevent/builtins.py", line 58, in __import__
result = _import(*args, **kwargs)
File "/mnt/usb500G/pyProjectsEnv/proGeekAPI/dashboard_main/menu.py", line 20, in <module>
blog.children.add(
AttributeError: 'list' object has no attribute 'add'
Menu file:
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='blog:index')
main_menu.register(blog)
# nodes created with a pattern_name argument will use django reverse
#assert blog.get_url() == '/blog'
# 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.children.add(
menu.Node(id='last_entries',
label='Last entries',
pattern_name='blog:last_entries')
)
blog.children.add(
menu.Node(id='archives', label='Archives', pattern_name='blog:archives')
)
# will be shown to anonymous users only
login = menu.AnonymousNode(id='login',
label='Login',
pattern_name='accounts_login',
link_attrs={'class': 'big-button'})
main_menu.register(login)
# will be shown to authenticated users only
logout = menu.AuthenticatedNode(id='logout',
label='Logout',
pattern_name='accounts_logout')
main_menu.register(logout)
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',
'rosetta',
'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.locale.LocaleMiddleware',
'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/proGeekEnv/local/lib/python2.7/site-packages/navutils/templates/navutils/node.html, error at line 6
Reverse for 'accounts_login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
1 : {% load navutils_tags %}
2 :
3 : <li
4 : class="{% block node_class %}menu-item{% if node.css_class %} {{ node.css_class }}{% endif %}{% if is_current %} {{ menu_config.CURRENT_MENU_ITEM_CLASS }}{% endif %}{% if has_current %} {{ menu_config.CURRENT_MENU_ITEM_PARENT_CLASS }}{% endif %}{% if viewable_children %} has-children has-dropdown{% endif %}{% endblock %}"
5 : {% for attr, value in node.attrs.items %} {{ attr }}="{{ value }}"{% endfor %}>
6 : <a href=" {{ node.get_url }} "{% for attr, value in node.link_attrs.items %} {{ attr }}="{{ value }}"{% endfor %}>{% block node_label %}{{ node.label }}{% endblock %}
7 : {% if viewable_children %}
8 :
9 : {% for children_node in viewable_children %}
10 : {% render_node node=children_node current_depth=current_depth|add:'1' %}
11 : {% endfor %}
12 :
13 : {% endif %}
14 :
15 :
Traceback:
File "/mnt/usb500G/pyProjectsEnv/proGeekEnv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
response = response.render()
self.content = self.rendered_content
content = template.render(context, self._request)
return self.template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return compiled_parent._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return compiled_parent._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
result = block.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
return func(_resolved_args, *_resolved_kwargs)
return t.render(template.Context(final_context))
return self.template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
nodelist.append(node.render(context))
return func(_resolved_args, *_resolved_kwargs)
return t.render(template.Context(final_context))
return self.template.render(context)
return self._render(context)
return self.nodelist.render(context)
bit = self.render_node(node, context)
return node.render(context)
output = self.filter_expression.resolve(context)
obj = self.var.resolve(context)
value = self._resolve_lookup(context)
current = current()
return reverse(self.pattern_name, kwargs=expected_kwargs)
return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, _args, *_kwargs)))
(lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /
Exception Value: Reverse for 'accounts_login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.