如何使用Django

时间:2019-09-05 21:18:29

标签: django

我是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')

1 个答案:

答案 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')