UI forcing to use the clone button when there is no path defined for it #6842

Closed
opened 2025-12-29 19:45:57 +01:00 by adam · 1 comment
Owner

Originally created by @abhi1693 on GitHub (Aug 19, 2022).

NetBox version

3.3.0

Python version

3.10

Steps to Reproduce

This issue is for the plugin development so the steps to reproduce cannot be accomplished using standard vanilla install.

  1. Use the plugin tutorial repo and ensure not to add the *_add URLs to the urls.py.
  2. Open the object page and notice the page crash for unable to find a reverse path for it's *_add URL

Expected Behavior

When either the clone() method is overridden to return an empty dictionary or the *_add path is not defined the clone button should not be visible.

Observed Behavior

Internal Server Error: /plugins/manager/minion/1/
Traceback (most recent call last):
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 84, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 90, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 119, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 67, in get
    return render(request, self.get_template_name(), {
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/backends/django.py", line 62, in render
    return self.template.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 175, in render
    return self._render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1059, in render
    output = self.filter_expression.resolve(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 712, in resolve
    obj = self.var.resolve(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 842, in resolve
    value = self._resolve_lookup(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 909, in _resolve_lookup
    current = current()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 79, in super
    return mark_safe(self.render(self.context))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 322, in render
    return nodelist.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated
    return self.render(context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/library.py", line 260, in render
    _dict = self.func(*resolved_args, **resolved_kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/templatetags/buttons.py", line 17, in clone_button
    url = reverse(get_viewname(instance, 'add'))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/urls/base.py", line 88, in reverse
    return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 802, in _reverse_with_prefix
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'manager_add' not found. 'manager_add' is not a valid view function or pattern name.
Originally created by @abhi1693 on GitHub (Aug 19, 2022). ### NetBox version 3.3.0 ### Python version 3.10 ### Steps to Reproduce This issue is for the plugin development so the steps to reproduce cannot be accomplished using standard vanilla install. 1. Use the plugin tutorial repo and ensure not to add the `*_add` URLs to the `urls.py`. 2. Open the object page and notice the page crash for unable to find a reverse path for it's `*_add` URL ### Expected Behavior When either the `clone()` method is overridden to return an empty dictionary or the `*_add` path is not defined the clone button should not be visible. ### Observed Behavior ``` Internal Server Error: /plugins/manager/minion/1/ Traceback (most recent call last): File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 84, in view return self.dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 90, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 119, in dispatch return handler(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 67, in get return render(request, self.get_template_name(), { File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render content = loader.render_to_string(template_name, context, request, using=using) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/backends/django.py", line 62, in render return self.template.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 175, in render return self._render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render return self.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render return compiled_parent._render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render return self.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render return compiled_parent._render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render return self.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render return compiled_parent._render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/test/utils.py", line 111, in instrumented_test_render return self.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render result = block.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render result = block.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1059, in render output = self.filter_expression.resolve(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 712, in resolve obj = self.var.resolve(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 842, in resolve value = self._resolve_lookup(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 909, in _resolve_lookup current = current() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 79, in super return mark_safe(self.render(self.context)) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render result = block.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render result = block.nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 322, in render return nodelist.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in render return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 1000, in <listcomp> return SafeString("".join([node.render_annotated(context) for node in self])) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/base.py", line 958, in render_annotated return self.render(context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/template/library.py", line 260, in render _dict = self.func(*resolved_args, **resolved_kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/templatetags/buttons.py", line 17, in clone_button url = reverse(get_viewname(instance, 'add')) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/urls/base.py", line 88, in reverse return resolver._reverse_with_prefix(view, prefix, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 802, in _reverse_with_prefix raise NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch: Reverse for 'manager_add' not found. 'manager_add' is not a valid view function or pattern name. ```
adam closed this issue 2025-12-29 19:45:57 +01:00
Author
Owner

@jeremystretch commented on GitHub (Aug 22, 2022):

This is expected behavior. The generic view template (generic/objects.html) includes a clone button, which assumes the presence of an "add" view for the object type. If you don't want to include that button, you'll need to override the controls block.

@jeremystretch commented on GitHub (Aug 22, 2022): This is expected behavior. The generic view template (`generic/objects.html`) includes a clone button, which assumes the presence of an "add" view for the object type. If you don't want to include that button, you'll need to override the `controls` block.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#6842