我是Django的新手,我想创建一个表单,用户可以在其中输入一些数据,并创建一个Word文档供下载。
我正在使用template-docs库(https://pypi.org/project/templateddocs/)完成此任务,但收到错误。
在我的views.py中:
from templated_docs import fill_template
from templated_docs.http import FileResponse
def get_document(request):
"""
A view to get a document filled with context variables.
"""
context = {'user': request.user} # Just an example
filename = fill_template('sample.odt', context, output_format='pdf')
visible_filename = 'greeting.pdf'
return FileResponse(filename, visible_filename)
用户在表单中输入信息后,出现此错误:
get_template_sources()带有2个位置参数,但给出了3个
错误是由views.py中的变量产生的: 文件名= fill_template('sample.odt',上下文,output_format ='pdf')
答案 0 :(得分:1)
该库是3年前编写的,似乎已不再维护。
它通过pylokit
使用LibreOffice来解析源并生成输出。
或者,您可以使用Pandoc(通用文档转换器)+ Pandoc Filters来解析源代码,进行修改并生成输出。
上面的所有代码都可以通过以下代码完成。
import io
import pypandoc
import panflute as pf
from django.http import FileResponse
def generate_invoice(request):
template = 'files/invoice.docx'
output_path = '/tmp/invoice - {}.pdf'.format(request.user.id)
context = {
'{{name}}': 'Foo'
}
# parse input file
data = pypandoc.convert_file(template, 'json')
f = io.StringIO(data)
doc = pf.load(f)
# do replacements
for key, value in context.items():
doc = doc.replace_keyword(key, pf.Str(value))
# generate output
with io.StringIO() as f:
pf.dump(doc, f)
contents = f.getvalue()
pypandoc.convert_text(contents, 'pdf', format='json', outputfile=output_path)
return FileResponse(open(output_path, 'rb'), filename='invoice.pdf')