Иногда бывает необходимость в создании 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 документ, который будем использовать как шаблон, для вывода информации из нашего приложения.
4. Проверим результат.
Как видите, это было очень просто!
Ещё раз ссылка на библиотеку: https://github.com/christopher-ramirez/secretary
По материалам: «How To Generate Documents ODT With Secretary»
Разработчик: java, kotlin, c#, javascript, dart, 1C, python, php.
Пишите: @ighar. Buy me a coffee, please :).