在django中创建下载链接文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在django中创建下载链接文件相关的知识,希望对你有一定的参考价值。
我在项目中创建了一个文件,从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)
答案
您需要创建下载视图和网址。像这样的功能来创建链接:
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库而没有看到你的其他代码。这只是一个基本的实现思路。
以上是关于在django中创建下载链接文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在Javascript中创建动态文件+链接以供下载? [复制]