Django:压缩选定对象的pdf

Posted

技术标签:

【中文标题】Django:压缩选定对象的pdf【英文标题】:Django : Zipping selected object's pdf 【发布时间】:2017-07-21 07:22:31 【问题描述】:

我有一个显示培训师姓名、位置等的索引视图以及一个下载他们的个人资料的按钮(已经在数据库中作为 pdf 格式)。我根据一些参数搜索和过滤这些。现在我希望能够选择其中一些并下载选定的培训师资料。我是 Django 新手,不知道该怎么做。这是我的代码。它说'FieldFile 对象不可调用' 视图.py def 下载(请求): 导入压缩文件 导入操作系统

file = zipfile.ZipFile("C:\\Downloads\\test.zip", "w")

filelist = []
filelist+= 'Trainer.checkboxoption' in request.REQUEST
for i in filelist:
   file.write(i)

file.close()
return render(request,'trainer/index.html')

index.html

    <form action="download/" method="post">
            <div class="caption">
                <div >
                    <table style="width:100%" class="table">
                        <tr>
                            <th>#</th>
                            <th>Name</th>
                            <th>Technology</th>
                            <th>Location</th>
                            <th> View</th>
                            <th>Download</th>
                            <th>Delete</th>
                        </tr>
                        % for trainer in all_trainers %
                        <tr>
                            <td><input type="checkbox" id="trainer forloop.counter " name="trainer" value=" trainer.id "></td>
                                <td> <a href="/trainer/ trainer.id "> trainer.name </td>
                                <td> trainer.technology </td></a>
                                <td> trainer.location </td>
                                <!-- View Details -->
                                <td><a href="/trainer/ trainer.id " class="btn btn-primary btn-sm">View Details</a></td>

                                <td><a href="../media/ trainer.trainer_profile " class="btn">Download PDF</a></td>

                                <!-- Delete Album -->
                                <td><form action="trainer/trainer.id /delete/" method="post">
                                    % csrf_token %
                                    <input type="hidden" name="trainer_id" value=" trainer.id " />
                                    <button type="submit" class="btn btn-default btn-sm">
                                        <span class="glyphicon glyphicon-trash"></span>
                                    </button>
                                </form></td>
                            </tr>
                        % endfor %
                    </table>
                </div>
            </div>
            <input type="submit" value="Download ZIP">
        </form>

【问题讨论】:

为什么它需要在一个 zip 中? 很难单独下载每个文件..文件超过1000个 啊好吧,我误会了。 【参考方案1】:

views.py:

    def download(request):
        import zipfile
        filef = zipfile.ZipFile("test.zip", "w")
        var = request.POST.getlist('checks')
        pdfprofile = []
        for i in var:
            trainer= Trainer.objects.get(pk=i)
            pdfprofile.append(trainer.trainer_profile)

        for i in pdfprofile:
            filef.write("D:\\Django\\myproduct\\media\\"+str(i))
        filef.close()

        response = HttpResponse(open("test.zip", "rb").read(), content_type='application/zip')
         response['Content-Disposition'] = 'attachment; filename=test.zip'
        return response

【讨论】:

以上是关于Django:压缩选定对象的pdf的主要内容,如果未能解决你的问题,请参考以下文章

Django 将选定对象从表单传递到另一个表单

Django admin:将选定的相关字段框更改为自动完成

如何在Django中将pdf作为电子邮件附件发送

将 JSONField 解压缩到多个 django 表单字段中

更新 SwiftUI 列表中的选定对象

在 Swift Playground 中生成 PDF