Генерирование документов ODT с Secretary в Django

Генерирование документов ODT с Secretary в Django
Иногда бывает необходимость в создании odt для представления информации из приложения Django. Для этого случая можно использовать библиотеку Secretary.

Secretary это библиотека, позволяющая использовать формат ODT для представления информации в django. Secretary использует семантику шаблонов jinja2 для генерации документов.

Установка Secretary:

pip install secretary
Для демонстрации возможностей библиотеки, создадим модель people с тремя полями (name, surname и email). А затем мы создадим документ с таблицей, в которой выведем данные всех people с их данными. Приступим!

1. Добавим новый url в urls.py для привязки нового представления, которое сгенерирует документ.

from django.conf.urls import url
from . import views

urlpatterns = [
url(r'^generate/document/$', views.generate_document,name='generate_document')
]

2. Создадим простенькое представление для вывода и создания http ответа в views.py. Для упрощения логики в представлении, создадим класс со статическим методом, выводящим документ и создающим HTTP ответ.

# views.py
from .models import Person
from .logic import ReportGenerator

def generate_document(request):
# Model data
people = Person.objects.all().order_by('last_name')

return ReportGenerator().create_report(people)
# logic.py
from secretary import Renderer
from django.http import HttpResponse
import os, tempfile

class ReportGenerator():
""" Class ReportGenerator """

@staticmethod
def create_report(data):
engine = Renderer()
root = os.path.dirname(__file__)
document = root + '/templates/bedjango/template.odt'
result = engine.render(document, data=data)

response = HttpResponse(content_type='application/vnd.oasis.opendocument.text; charset=UTF-8')
response['Content-Disposition'] = 'inline; filename=people.odt'
with tempfile.NamedTemporaryFile() as output:
output.write(result)
output.flush()
output = open(output.name, 'r')
response.write(output.read())

return response
3. Создадим odt документ, который будем использовать как шаблон, для вывода информации из нашего приложения.

Генерирование документов ODT с Secretary в Django
4. Проверим результат.

Генерирование документов ODT с Secretary в Django
Как видите, это было очень просто!

Ещё раз ссылка на библиотеку: https://github.com/christopher-ramirez/secretary

По материалам: «How To Generate Documents ODT With Secretary»

Leave a Comment