django admin pdf导出
时间: 2023-07-13 19:12:58 浏览: 50
你可以使用第三方库`reportlab`和`django-easy-pdf`来实现Django Admin中的PDF导出。具体步骤如下:
1. 安装依赖库:
```
pip install reportlab django-easy-pdf
```
2. 在settings.py中添加以下设置:
```python
INSTALLED_APPS = [
# ...
'easy_pdf',
]
# Django Easy PDF settings
# 存储导出的PDF文件的目录
PDF_ROOT = '/tmp/'
# PDF文件的命名方式
PDF_FILENAME = 'report.pdf'
# 是否显示debug信息
PDF_DEBUG = False
# 是否使用wkhtmltopdf而不是reportlab来生成PDF
PDF_USE_CELERY = False
PDF_INCLUDE_URLS = False
```
3. 创建一个PDF View:
```python
from django.http import HttpResponse
from django.template.loader import get_template
from django.views import View
from xhtml2pdf import pisa
class PDFView(View):
def get(self, request):
template = get_template('my_template.html')
context = {
# 上下文数据
}
html = template.render(context)
pdf = self.render_pdf(html)
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="report.pdf"'
return response
def render_pdf(self, html):
pdf_file = open(PDF_ROOT + PDF_FILENAME, 'w+b')
pisa.CreatePDF(html.encode('utf-8'), pdf_file)
pdf_file.seek(0)
pdf = pdf_file.read()
pdf_file.close()
return pdf
```
4. 创建一个Admin Action,用于触发PDF导出:
```python
from django.contrib import admin
from django.http import HttpResponse
from django.template.loader import get_template
from xhtml2pdf import pisa
class ExportPDFAdminAction(admin.Action):
# action名称
name = 'export_pdf'
# action描述
description = 'Export selected objects as PDF'
def export_pdf(self, request, queryset):
template = get_template('my_template.html')
context = {
# 上下文数据
}
html = template.render(context)
pdf = self.render_pdf(html)
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="report.pdf"'
return response
export_pdf.short_description = 'Export selected objects as PDF'
def render_pdf(self, html):
pdf_file = open(PDF_ROOT + PDF_FILENAME, 'w+b')
pisa.CreatePDF(html.encode('utf-8'), pdf_file)
pdf_file.seek(0)
pdf = pdf_file.read()
pdf_file.close()
return pdf
```
5. 在Admin中注册该Action:
```python
class MyModelAdmin(admin.ModelAdmin):
actions = [ExportPDFAdminAction]
admin.site.register(MyModel, MyModelAdmin)
```
这样,你就可以在MyModel的Admin页面中,选择要导出的对象,点击"Export selected objects as PDF"按钮,即可将所选对象导出为PDF文件。