是否可以将视图生成的pdf附加到django中的电子邮件中?

是否可以将视图生成的pdf附加到django中的电子邮件中?,django,email,pdf,Django,Email,Pdf,我正在使用第三方应用程序生成pdf 在我看来,我有以下创建Pdf的代码: class artwork_catalog(PDFTemplateView): template_name = "someapp/sometemplate.html" def get_context_data(self, **kwargs): return super(artwork_catalog, self).get_context_data( pagesize

我正在使用第三方应用程序生成pdf

在我看来,我有以下创建Pdf的代码:

class artwork_catalog(PDFTemplateView):
    template_name = "someapp/sometemplate.html"

    def get_context_data(self, **kwargs):
        return super(artwork_catalog, self).get_context_data(
            pagesize="A4",
            title="My Title" + datetime.datetime.now().strftime('%m/%Y'),
            artworks=ArtWork.objects.filter(public=True).order_by('year'),
            **kwargs
        )
我的视图有以下Url:

url(
        r"^mypdf.pdf$",
        artwork_catalog.as_view()
    ),
因此,我可以在
localhost:8000/mypdf.Pdf
访问我的Pdf。 现在我想通过电子邮件发送此Pdf作为附件。我创建了一个视图,但无法使其工作:

def order_catalog(request):
    if request.method == 'POST':
        form = OrderCatalogForm(request.POST)
        if form.is_valid():
            subject = 'Test'
            from_email = 'Test@Test.com'
            message = 'TESTTESTTESTTEST'
            recipient = form.cleaned_data['email']
            pdf = artwork_catalog # here I'd like to insert my Pdf
            try:
                mail = EmailMessage(subject, message, from_email, [recipient])
                mail.attach("MyPdf.pdf", pdf, "application/pdf")
                mail.send()
            except:
                return HttpResponse('Error')
            return redirect('/somewhere/')
    else:
        form = OrderCatalogForm()
    return render(request, 'someapp/order_catalog.html', {'form': form})

有什么提示吗?向Manuel致以最诚挚的问候

如果您仍然对解决方案感兴趣,请使用以下方法:

from easy_pdf.rendering import render_to_pdf
...
pdf = render_to_pdf(
        'someapp/sometemplate.html',
        {
            'pagesize': "A4",
            'title': "My Title" + datetime.datetime.now().strftime('%m/%Y'),
            'artworks' ArtWork.objects.filter(public=True).order_by('year')
        }
)