You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django中如何将PDFTemplateResponse转换为类字节对象?

将PDFTemplateResponse转为字节对象用于邮件附件

嘿,我来帮你搞定这个问题!你现在用PDFTemplateResponse生成了PDF,但需要把它转成类字节对象来作为邮件附件,其实这个操作非常直接,咱们一步步来:

核心思路

PDFTemplateResponse本质是Django HttpResponse的子类,它的content属性就是已经生成好的PDF字节数据,不过要确保先触发响应的渲染流程,保证PDF内容完全生成。

修改后的代码示例

你可以在生成response之后,添加两行代码就能拿到字节对象:

class MYPDFView(View):
    template = 'pdftemplate.html'
    def get(self, request):
        data = {}
        response = PDFTemplateResponse(
            request=request,
            template=self.template,
            filename="hello.pdf",
            context=data,
            show_content_in_browser=True,
            cmd_options={'margin-top': 10, "zoom":1, "viewport-size" :"1366 x 513", 'javascript-delay':1000, 'footer-center' :'[page]/[topage]', "no-stop-slow-scripts":True},
        )
        # 手动触发渲染,确保PDF内容完全生成
        response.render()
        # 获取PDF的字节内容,这就是邮件附件需要的类字节对象
        pdf_bytes = response.content

        # --- 这里就可以用pdf_bytes来构造邮件附件了 ---
        # 下面是发送邮件的示例代码(用Django的EmailMessage)
        from django.core.mail import EmailMessage
        email = EmailMessage(
            subject="你的PDF文件已生成",
            body="这是你请求的PDF附件,请查收。",
            from_email="sender@yourdomain.com",
            to=["recipient@example.com"],
        )
        # 添加附件:文件名、字节内容、MIME类型
        email.attach("hello.pdf", pdf_bytes, "application/pdf")
        email.send()

        # 可以返回给用户一个成功提示,或者继续返回PDF响应
        return HttpResponse("PDF已作为附件发送!")

关键说明

  • response.render():虽然在某些场景下Django会自动渲染响应,但手动调用能确保wkhtmltopdf已经完成PDF的生成,避免拿到空的或不完整的字节数据。
  • response.content:返回的是bytes类型,完全符合邮件附件对类字节对象的要求。
  • 邮件附件的MIME类型要设为application/pdf,这样收件方的邮件客户端才能正确识别这是PDF文件。

内容的提问来源于stack exchange,提问作者MiniGunnR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:05:24