Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update exception handling when ObjectListView is used and related views for action_buttons don't exist. #1427

Closed
jeffkala opened this issue Feb 25, 2022 · 1 comment · Fixed by #1806
Assignees
Labels
type: bug Something isn't working as expected

Comments

@jeffkala
Copy link
Contributor

Environment

  • Python version: 3.7
  • Nautobot version: 1.2.5

Steps to Reproduce

  1. Have URLs specified.
urlpatterns = [
    path("software-files/", views.SoftwareFileAttachmentListView.as_view(), name="fileattachment_list"),
    path("software-files/add/", views.SoftwareFileAttachmentEditView.as_view(), name='fileattachment_edit'),
]
  1. Have a ObjectListView that does NOT include the action_button parameter.
class SoftwareFileAttachmentListView(generic.ObjectListView):
    """List Software Files."""

    table = tables.SoftwareFileAttachmentTable
    queryset = models.SoftwareFileAttachment.objects.all()
    filterset = filters.SoftwareFileAttachmentFilterSet
    filterset_form = forms.SoftwareFileAttachmentFilterForm
  1. Attempt to access the URL.

Expected Behavior

Better exception handling that points to the lack of "expected" views that don't exist.

Observed Behavior

Generic Traceback that doesn't offer much help.

nautobot_1  | Traceback (most recent call last):
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
nautobot_1  |     response = get_response(request)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 181, in _get_response
nautobot_1  |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py", line 70, in view
nautobot_1  |     return self.dispatch(request, *args, **kwargs)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/nautobot/utilities/views.py", line 94, in dispatch
nautobot_1  |     return super().dispatch(request, *args, **kwargs)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py", line 98, in dispatch
nautobot_1  |     return handler(request, *args, **kwargs)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/nautobot/core/views/generic.py", line 256, in get
nautobot_1  |     return render(request, self.template_name, context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
nautobot_1  |     content = loader.render_to_string(template_name, context, request, using=using)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
nautobot_1  |     return template.render(context, request)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
nautobot_1  |     return self.template.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 170, in render
nautobot_1  |     return self._render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/test/utils.py", line 96, in instrumented_test_render
nautobot_1  |     return self.nodelist.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
nautobot_1  |     bit = node.render_annotated(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
nautobot_1  |     return self.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
nautobot_1  |     return compiled_parent._render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/test/utils.py", line 96, in instrumented_test_render
nautobot_1  |     return self.nodelist.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
nautobot_1  |     bit = node.render_annotated(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
nautobot_1  |     return self.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render
nautobot_1  |     result = block.nodelist.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
nautobot_1  |     bit = node.render_annotated(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
nautobot_1  |     return self.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/defaulttags.py", line 312, in render
nautobot_1  |     return nodelist.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 938, in render
nautobot_1  |     bit = node.render_annotated(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
nautobot_1  |     return self.render(context)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/template/library.py", line 214, in render
nautobot_1  |     _dict = self.func(*resolved_args, **resolved_kwargs)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/nautobot/utilities/templatetags/buttons.py", line 101, in add_button
nautobot_1  |     url = reverse(url)
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/urls/base.py", line 87, in reverse
nautobot_1  |     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
nautobot_1  |   File "/usr/local/lib/python3.7/site-packages/django/urls/resolvers.py", line 689, in _reverse_with_prefix
nautobot_1  |     raise NoReverseMatch(msg)
nautobot_1  | django.urls.exceptions.NoReverseMatch: Reverse for 'None' not found. 'None' is not a valid view function or pattern name.
@jeffkala
Copy link
Contributor Author

Something like path for Add, import, export views are missing would offer better insight.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: bug Something isn't working as expected
Projects
No open projects
Archived in project
Development

Successfully merging a pull request may close this issue.

4 participants