diff --git a/docs/release-notes/version-2.10.md b/docs/release-notes/version-2.10.md
index eb25d083b..d289c7a05 100644
--- a/docs/release-notes/version-2.10.md
+++ b/docs/release-notes/version-2.10.md
@@ -4,4 +4,9 @@
### Other Changes
+* [#4360](https://github.com/netbox-community/netbox/issues/4360) - Remove support for the Django template language from export templates
* [#4941](https://github.com/netbox-community/netbox/issues/4941) - `commit` argument is now required argument in a custom script's `run()` method
+
+### REST API Changes
+
+* extras.ExportTemplate: The `template_language` field has been removed
diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py
index a198d03d5..de6a9b470 100644
--- a/netbox/extras/admin.py
+++ b/netbox/extras/admin.py
@@ -198,11 +198,6 @@ class ExportTemplateForm(forms.ModelForm):
class Meta:
model = ExportTemplate
exclude = []
- help_texts = {
- 'template_language': "Warning: Support for Django templating will be dropped in NetBox "
- "v2.10. Jinja2 is strongly "
- "recommended."
- }
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -219,7 +214,7 @@ class ExportTemplateAdmin(admin.ModelAdmin):
'fields': ('content_type', 'name', 'description', 'mime_type', 'file_extension')
}),
('Content', {
- 'fields': ('template_language', 'template_code'),
+ 'fields': ('template_code',),
'classes': ('monospace',)
})
)
diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py
index aa8f6ba69..a186f772f 100644
--- a/netbox/extras/api/serializers.py
+++ b/netbox/extras/api/serializers.py
@@ -71,17 +71,10 @@ class ExportTemplateSerializer(ValidatedModelSerializer):
content_type = ContentTypeField(
queryset=ContentType.objects.filter(FeatureQuery('export_templates').get_query()),
)
- template_language = ChoiceField(
- choices=TemplateLanguageChoices,
- default=TemplateLanguageChoices.LANGUAGE_JINJA2
- )
class Meta:
model = ExportTemplate
- fields = [
- 'id', 'url', 'content_type', 'name', 'description', 'template_language', 'template_code', 'mime_type',
- 'file_extension',
- ]
+ fields = ['id', 'url', 'content_type', 'name', 'description', 'template_code', 'mime_type', 'file_extension']
#
diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py
index e8962da01..288be10e2 100644
--- a/netbox/extras/filters.py
+++ b/netbox/extras/filters.py
@@ -101,7 +101,7 @@ class ExportTemplateFilterSet(BaseFilterSet):
class Meta:
model = ExportTemplate
- fields = ['id', 'content_type', 'name', 'template_language']
+ fields = ['id', 'content_type', 'name']
class TagFilterSet(BaseFilterSet):
diff --git a/netbox/extras/migrations/0048_exporttemplate_remove_template_language.py b/netbox/extras/migrations/0048_exporttemplate_remove_template_language.py
new file mode 100644
index 000000000..68ff8f5ab
--- /dev/null
+++ b/netbox/extras/migrations/0048_exporttemplate_remove_template_language.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.1 on 2020-08-21 15:13
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('extras', '0047_tag_ordering'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='exporttemplate',
+ name='template_language',
+ ),
+ ]
diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py
index e57caf091..40ba64a67 100644
--- a/netbox/extras/models/models.py
+++ b/netbox/extras/models/models.py
@@ -283,11 +283,6 @@ class ExportTemplate(models.Model):
max_length=200,
blank=True
)
- template_language = models.CharField(
- max_length=50,
- choices=TemplateLanguageChoices,
- default=TemplateLanguageChoices.LANGUAGE_JINJA2
- )
template_code = models.TextField(
help_text='The list of objects being exported is passed as a context variable named queryset
.'
)
@@ -321,16 +316,7 @@ class ExportTemplate(models.Model):
context = {
'queryset': queryset
}
-
- if self.template_language == TemplateLanguageChoices.LANGUAGE_DJANGO:
- template = Template(self.template_code)
- output = template.render(Context(context))
-
- elif self.template_language == TemplateLanguageChoices.LANGUAGE_JINJA2:
- output = render_jinja2(self.template_code, context)
-
- else:
- return None
+ output = render_jinja2(self.template_code, context)
# Replace CRLF-style line terminators
output = output.replace('\r\n', '\n')
diff --git a/netbox/extras/tests/test_filters.py b/netbox/extras/tests/test_filters.py
index 72db138e2..deb41d628 100644
--- a/netbox/extras/tests/test_filters.py
+++ b/netbox/extras/tests/test_filters.py
@@ -55,9 +55,9 @@ class ExportTemplateTestCase(TestCase):
content_types = ContentType.objects.filter(model__in=['site', 'rack', 'device'])
export_templates = (
- ExportTemplate(name='Export Template 1', content_type=content_types[0], template_language=TemplateLanguageChoices.LANGUAGE_DJANGO, template_code='TESTING'),
- ExportTemplate(name='Export Template 2', content_type=content_types[1], template_language=TemplateLanguageChoices.LANGUAGE_JINJA2, template_code='TESTING'),
- ExportTemplate(name='Export Template 3', content_type=content_types[2], template_language=TemplateLanguageChoices.LANGUAGE_JINJA2, template_code='TESTING'),
+ ExportTemplate(name='Export Template 1', content_type=content_types[0], template_code='TESTING'),
+ ExportTemplate(name='Export Template 2', content_type=content_types[1], template_code='TESTING'),
+ ExportTemplate(name='Export Template 3', content_type=content_types[2], template_code='TESTING'),
)
ExportTemplate.objects.bulk_create(export_templates)
@@ -73,10 +73,6 @@ class ExportTemplateTestCase(TestCase):
params = {'content_type': ContentType.objects.get(model='site').pk}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
- def test_template_language(self):
- params = {'template_language': TemplateLanguageChoices.LANGUAGE_JINJA2}
- self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
-
class ConfigContextTestCase(TestCase):
queryset = ConfigContext.objects.all()