在django中创建下载链接文件

问题描述 投票:0回答:1

我在项目中创建了一个文件,从html生成pdf。为此我有这个方法:

 def generation_html_to_pdf(self):
        path_pdf = None
        with NamedTemporaryFile(delete=False, suffix=".pdf", dir='pdf_files') as tf:
             path_pdf = tf.name
             pdfkit.from_file('templates/first_page.html', tf.name)

        return path_pdf 

然后,在pdf_files文件夹中我有pdf文件。我想获得此文件的下载链接:

我的看法

path_to_pdf = generation_html_to_pdf()
download_link = 'http://' + request.get_host() + path_to_pdf
json_inf_pdf = {'download_link':  download_link}
return JsonResponse(json_inf_pdf, status=200)

我有这样的json:

{"download_link": "http://127.0.0.1:8000/home/alex/projects/test_project/pdf_files/tmpe0nqbn01.pdf"}"

当我点击这个链接我有错误:

找不到页(404)

django file hyperlink
1个回答
1
投票

您需要创建下载视图和网址。像这样的功能来创建链接:

def download_link(request):
    ''' Create download link '''
    download_link = 'http://{}/{}'.format(request.get_host(), 'download/my_filename')
    json_inf_pdf = {'download_link':  download_link}
    return JsonResponse(json_inf_pdf, status=200)

并下载pdf:

def download_file(request, my_filename):
    ''' Download file '''
    # Open template
    from django.conf import settings
    template_url = os.path.join(settings.BASE_DIR, 'templates', 'first_page.html')
    template_open = open(template_url, 'r')
    # Read template
    from django import template
    t = template.Template(template_open.read())
    c = template.Context({})
    # Create pdf
    pdf = pdfkit.from_string(t.render(c))
    # Create and return response with created pdf
    response = HttpResponse(pdf)
    response['Content-Type'] = 'application/pdf'
    response['Content-disposition'] = 'attachment ; filename = {}'.format(my_filename)

    return response 

和网址:

path('/download/<str:my_filename>', views.download_file, name="download_pdf')

我不能保证这会在你的情况下无需修改,因为我不知道你正在使用哪个html-to-pdf库而没有看到你的其他代码。这只是一个基本的实现思路。

© www.soinside.com 2019 - 2024. All rights reserved.