1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #12187: Add button to download rendered config from UI

This commit is contained in:
jeremystretch
2023-04-17 16:37:02 -04:00
parent 86d185fe05
commit 014a5d10d1
2 changed files with 27 additions and 0 deletions

View File

@ -6,6 +6,7 @@ from django.core.paginator import EmptyPage, PageNotAnInteger
from django.db import transaction from django.db import transaction
from django.db.models import Prefetch from django.db.models import Prefetch
from django.forms import ModelMultipleChoiceField, MultipleHiddenInput, modelformset_factory from django.forms import ModelMultipleChoiceField, MultipleHiddenInput, modelformset_factory
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse from django.urls import reverse
from django.utils.html import escape from django.utils.html import escape
@ -2012,6 +2013,24 @@ class DeviceRenderConfigView(generic.ObjectView):
weight=2100 weight=2100
) )
def get(self, request, **kwargs):
instance = self.get_object(**kwargs)
context = self.get_extra_context(request, instance)
# If a direct export has been requested, return the rendered template content as a
# downloadable file.
if request.GET.get('export'):
response = HttpResponse(context['rendered_config'], content_type='text')
filename = f"{instance.name or 'config'}.txt"
response['Content-Disposition'] = f'attachment; filename="{filename}"'
return response
return render(request, self.get_template_name(), {
'object': instance,
'tab': self.tab,
**context,
})
def get_extra_context(self, request, instance): def get_extra_context(self, request, instance):
# Compile context data # Compile context data
context_data = instance.get_config_context() context_data = instance.get_config_context()

View File

@ -36,6 +36,14 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="card"> <div class="card">
<div class="card-header">
<div class="float-end">
<a href="?export=True" class="btn btn-sm btn-primary" role="button">
<i class="mdi mdi-download" aria-hidden="true"></i> Download
</a>
</div>
<h5>Rendered Config</h5>
</div>
{% if config_template %} {% if config_template %}
<pre class="card-body">{{ rendered_config }}</pre> <pre class="card-body">{{ rendered_config }}</pre>
{% else %} {% else %}