DocX-export added - not perfect yet.

This commit is contained in:
2026-02-20 15:59:51 +01:00
parent 67a967da67
commit 3faa88fcea
6 changed files with 298 additions and 0 deletions

View File

@@ -6,10 +6,12 @@ from django.views.decorators.http import require_POST
from django.views.decorators.csrf import csrf_exempt
from django.utils.html import escape, mark_safe
from django.utils.safestring import SafeString
import io
import json
import xml.etree.ElementTree as ET
from .models import Dokument, Vorgabe, VorgabeKurztext, VorgabeLangtext, Checklistenfrage, VorgabeComment
from .utils import build_dokument_xml_element, prettify_xml
from .docx_utils import build_standard_docx
from abschnitte.utils import render_textabschnitte
from datetime import date
@@ -256,6 +258,37 @@ def standard_json(request, nummer):
return JsonResponse(doc_data, json_dumps_params={'indent': 2, 'ensure_ascii': False}, encoder=DjangoJSONEncoder)
def standard_docx(request, nummer):
"""
Export a single Dokument as a Word (.docx) file.
"""
dokument = get_object_or_404(
Dokument.objects.prefetch_related(
'autoren', 'pruefende', 'vorgaben__thema',
'vorgaben__referenzen', 'vorgaben__checklistenfragen',
'vorgaben__vorgabekurztext_set__abschnitttyp',
'vorgaben__vorgabelangtext_set__abschnitttyp',
'geltungsbereich_set__abschnitttyp',
'einleitung_set__abschnitttyp',
'changelog__autoren',
),
nummer=nummer,
)
doc = build_standard_docx(dokument)
buffer = io.BytesIO()
doc.save(buffer)
buffer.seek(0)
response = HttpResponse(
buffer.read(),
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document',
)
response['Content-Disposition'] = f'attachment; filename="{dokument.nummer}.docx"'
return response
def standard_xml(request, nummer):
"""
Export a single Dokument as XML