Как: создавать файлы.doc, используя шаблоны с django/python
Я пишу приложение для Django, и я кое-что не знаю, как это сделать. Скажем, у вас есть база данных с пользователями и несколько файлов.doc, которые вы, возможно, захотите отправить этим пользователям (почтовые письма, а не электронные). Мне интересно, есть ли способ автоматически создавать эти письма из шаблонов, используя мою базу данных пользователей для заполнения некоторых маркеров? (т.е. имя, адрес и т. д.)
Я слышал о библиотеке Python "pod", но я никогда не использовал ее. Документация, кажется, говорит, что используют шаблоны openoffice, но мои в формате MS Word. Так как они часто обновляются людьми, которые используют только MS Office, я застрял.
Любая помощь будет оценена.
J.
2 ответа
Есть много разных способов сделать это, в зависимости от контекста. Вот некоторые идеи, упорядоченные в порядке убывания сложности.
Microsoft Word включает в себя средство для этого, называемое Mail Merge. Вы можете управлять Word из Python, используя COM-хуки, установив
pywin32
, Это будет делать то же самое, что и запуск слияния с помощью Microsoft Word. Это должно быть сделано на компьютере под управлением Windows с установленным Office, возможно, не на вашем сервере. См. http://bytes.com/topic/python/answers/165364-ms-word-mail-merge-automation или Google "python mail merge".OpenOffice использует Python в качестве макроязыка (я полагаю) и предоставляет API, используя
Python-UNO
, Вы можете заставить OpenOffice конвертировать файлы в его формат, а затем использоватьpod
выполнить слияние почты.Вы можете сказать своим пользователям, чтобы они предоставляли вам данные в лучшем формате, таком как шаблоны OpenOffice.
Вы можете экспортировать данные пользователей из Django, передать их людям, пишущим шаблоны, и сказать им, чтобы они делали свои письма самостоятельно.
Что бы вы ни выбрали, это будет нелегко.
Использовать mailmerge легко, и вы можете изменить шаблон из слова doc.
http://pbpython.com/python-word-template.html
Вы можете включить слияние почты с представлением, а также. Вот пример, где my_template1 - это шаблон документа Word, в котором есть поля с именами и названиями.
def TestDocument2(request):
template = os.path.join(os.path.dirname(__file__),
'templates/my_template1.docx')
document = MailMerge(template)
document.merge(name='testcoy',
title = 'My title',
)
f = io.BytesIO()
document.write(f)
length = f.tell()
f.seek(0)
response = HttpResponse(
f.getvalue(),
content_type='application/vnd.openxmlformats-
officedocument.wordprocessingml.document'
)
response['Content-Disposition'] = 'attachment; filename=example.docx'
response['Content-Length'] = length
return response