django 生成動態的PDF檔案
安裝WeasyPrint
pip install WeasyPrint
建立一個PDF模板(template)
我們需要一個HTML文件給WeasyPrint輸入。我們將要建立一個HTML
模板(template),渲染它使用Django,並且傳遞它給WeasyPrint來生成
PDF檔案。
建立一個新的模板(template)檔案在myapp應用的
templates目錄下命名為pdf.html
<html>
新增你要生成的頁面
</html>
這個模板(template)就是PDF檔案
渲染PDF檔案
我們將要建立一個檢視(view)來生成PDF檔案。編輯myapp應用的views.py檔案新增如下程式碼:
from django.conf import settings
from django.http import HttpResponse
from django.template.loader import render_to_string
import weasyprint
@staff_member_required
def admin_order_pdf(request, order_id):
queryset = get_object_or_404(mymodel, id=mymodel_id)
html = render_to_string('pdf.html',
{'queryset': queryset})
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'filename=\"mymodel_{}.pdf"'.format(mymodel.id)
weasyprint.HTML(string=html).write_pdf(response,
stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + 'css/pdf.css'
)])
return response
接下來配置一個路由去訪問就行了
效果: