Conditional custom link inclusion #2685

Closed
opened 2025-12-29 18:21:06 +01:00 by adam · 1 comment
Owner

Originally created by @ktims on GitHub (Jun 21, 2019).

Environment

  • Python version: 3.6.3
  • NetBox version: 2.6.0

Proposed Functionality

A facility to filter which custom links appear on the rendered page based on the object's attributes. I think the best implementation would be to provide an optional field in custom link creation which would accept a Jinja2 'if' clause body (e.g. obj.primary_ip is not none). If not included, the link would always be rendered. If included, the link block in the final rendered template would be wrapped in {% if %} {% endif %} to avoid rendering and evaluation of the URL and link text templates.

Use Case

Currently all custom links matching the object's type will be included in the page. In many cases this may not be appropriate (es.g. rack furniture is a 'dcim / device' but wouldn't be in an NMS / devices with no IP information can't have links to their console generated / custom link may depend on an optional custom field), or may lead to rendering oddities due to the chosen template for link text. It also necessitates carefully and obnoxiously adding conditionals on attributes used in the link text and URL templates to ensure that missing attributes don't break rendering of the entire page.

Database Changes

The CustomLink model would require a new CharField to store the conditional. Defaulting to null or the empty string for existing custom links should have no change in behaviour as the suggested implementation wouldn't filter if the field is empty.

External Dependencies

None

Originally created by @ktims on GitHub (Jun 21, 2019). <!-- NOTE: This form is only for proposing specific new features or enhancements. If you have a general idea or question, please post to our mailing list instead of opening an issue: https://groups.google.com/forum/#!forum/netbox-discuss NOTE: Due to an excessive backlog of feature requests, we are not currently accepting any proposals which significantly extend NetBox's feature scope. Please describe the environment in which you are running NetBox. Be sure that you are running an unmodified instance of the latest stable release before submitting a bug report. --> ### Environment * Python version: 3.6.3 * NetBox version: 2.6.0 <!-- Describe in detail the new functionality you are proposing. Include any specific changes to work flows, data models, or the user interface. --> ### Proposed Functionality A facility to filter which custom links appear on the rendered page based on the object's attributes. I think the best implementation would be to provide an optional field in custom link creation which would accept a Jinja2 'if' clause body (e.g. `obj.primary_ip is not none`). If not included, the link would always be rendered. If included, the link block in the final rendered template would be wrapped in `{% if %} {% endif %}` to avoid rendering and evaluation of the URL and link text templates. <!-- Convey an example use case for your proposed feature. Write from the perspective of a NetBox user who would benefit from the proposed functionality and describe how. ---> ### Use Case Currently all custom links matching the object's type will be included in the page. In many cases this may not be appropriate (es.g. rack furniture is a 'dcim / device' but wouldn't be in an NMS / devices with no IP information can't have links to their console generated / custom link may depend on an optional custom field), or may lead to rendering oddities due to the chosen template for link text. It also necessitates carefully and obnoxiously adding conditionals on attributes used in the link text and URL templates to ensure that missing attributes don't break rendering of the entire page. <!-- Note any changes to the database schema necessary to support the new feature. For example, does the proposal require adding a new model or field? (Not all new features require database changes.) ---> ### Database Changes The CustomLink model would require a new CharField to store the conditional. Defaulting to null or the empty string for existing custom links should have no change in behaviour as the suggested implementation wouldn't filter if the field is empty. <!-- List any new dependencies on external libraries or services that this new feature would introduce. For example, does the proposal require the installation of a new Python package? (Not all new features introduce new dependencies.) --> ### External Dependencies None
adam added the status: acceptedtype: feature labels 2025-12-29 18:21:06 +01:00
adam closed this issue 2025-12-29 18:21:06 +01:00
Author
Owner

@jeremystretch commented on GitHub (Jun 21, 2019):

We can tweak the template so that the link is only included if the Jinja2 in the CustomLink's text field renders to a non-empty string. So, you could do something like this:

{% if obj.device_role.slug == 'foo' %}Clicky{% endif %}

And the custom link would be displayed only if the device's role is Foo.

@jeremystretch commented on GitHub (Jun 21, 2019): We can tweak the template so that the link is only included if the Jinja2 in the CustomLink's `text` field renders to a non-empty string. So, you could do something like this: ``` {% if obj.device_role.slug == 'foo' %}Clicky{% endif %} ``` And the custom link would be displayed only if the device's role is Foo.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#2685