0

我想将模板渲染为 pdf 文件。所以我看了这个,发现了以下代码:

def write_pdf(template_src, context_dict):
    template = get_template(template_src)
    context = Context(context_dict)
    html = template.render(context)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(
        html.encode("UTF-8")), result, encoding='UTF-8')


    if not pdf.err:
        return http.HttpResponse(result.getvalue(),
                                 mimetype='application/pdf', )
    return http.HttpResponse('Gremlins ate your pdf! %s' % cgi.escape(html))

它工作得很好,但我无法更改文件名。如果我开始下载此文件,firefox 会说“1.pdf”已下载。所以这是我的问题:如何更改渲染模板的文件名?我查了这个,但我没有找到答案..(也许我太愚蠢了^^)

非常感谢您的帮助

4

1 回答 1

1

你很亲密。你只需要设置Content-Disposition你的响应:

def write_pdf(template_src, context_dict):
    template = get_template(template_src)
    context = Context(context_dict)
    html = template.render(context)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(
        html.encode("UTF-8")), result, encoding='UTF-8')

    if not pdf.err:
        response = http.HttpResponse(result.getvalue(),
                                 mimetype='application/pdf')

        response['Content-Disposition'] = 'attachment; filename=whatever.pdf'

        return response
    return http.HttpResponse('Gremlins ate your pdf! %s' % cgi.escape(html))
于 2014-03-09T02:51:55.510 回答