Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中执行管理操作以下载用户';s的pdf文件_Python_Django_Python 2.7_Django Admin_Pdfkit - Fatal编程技术网

Python 如何在django中执行管理操作以下载用户';s的pdf文件

Python 如何在django中执行管理操作以下载用户';s的pdf文件,python,django,python-2.7,django-admin,pdfkit,Python,Django,Python 2.7,Django Admin,Pdfkit,我想创建一个管理操作来下载用户的pdf文件 用户文件将上载到媒体目录中 什么和管理员应该能够下载任何文件 我试着用pdfkit让他下载这些文件,但我做不到 > import pdfkit > > def downloadCV(self, request, queryset): > projectUrl = str(queryset[0].cv)+'' > pdf = pdfkit.from_url(projectUrl, False) >

我想创建一个管理操作来下载用户的pdf文件 用户文件将上载到媒体目录中 什么和管理员应该能够下载任何文件 我试着用pdfkit让他下载这些文件,但我做不到

> import pdfkit
> 
> def downloadCV(self, request, queryset):
>     projectUrl =  str(queryset[0].cv)+''
>     pdf = pdfkit.from_url(projectUrl, False)
>     response = HttpResponse(pdf,content_type='application/pdf')
>     response['Content-Disposition'] = 'attachment; filename="user_cv.pdf"'
所以我的问题是 让管理员下载pdf文件的最佳方式是什么

我试过这样做

    def downloadCV(self, request, queryset): 
    for x in queryset: 
        projectUrl =  str(x.cv)+''  
    if projectUrl:          
    with open(projectUrl, 'r') as pdf:  
    response = HttpResponse(pdf,content_type='application/pdf')
    response['ContentDisposition']='attachment;filename="user_cv.pdf"'          
    return response 
    pdf.closed

但我一次只能下载一个文件,是否可以一次下载多个PDF?

一个请求只能给出一个响应。所以我认为你有两个选择

选项1,您可以提出多个请求。基本上类似于您现在的代码,但目标是一个文件,但使用某种javascript代码,将在新选项卡/窗口中对单个文件运行操作。因此,假设您在管理中检查了3个文件,并运行了需要打开3个选项卡的操作,每个选项卡都有自己的文件为您提供pdf

选项2,压缩文件并返回一个压缩文件。这对我来说似乎更容易。这是一个我没有测试过的例子,但你明白了。。从queryset中收集文件,然后将它们放入zipfile中,然后将zipfile端上来

import pdfkit
import tempfile
import zipfile


def downloadCV(self, request, queryset):
    with tempfile.SpooledTemporaryFile() as tmp:
        with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as archive:
            for index, item in enumerate(queryset):
                projectUrl = str(item.cv) + ''
                fileNameInZip = '%s.zip' % index
                pdf = pdfkit.from_url(projectUrl, False)
                archive.writestr(fileNameInZip, pdf)
            tmp.seek(0)
            response = HttpResponse(tmp.read(), mimetype='application/x-zip-compressed')
            response['Content-Disposition'] = 'attachment; filename="pdfs.zip"'
            return response