Генерирование документов 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
Как видите, это было очень просто!

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

По материалам: «How To Generate Documents ODT With Secretary»
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.