3 回答

TA貢獻1859條經驗 獲得超6個贊
我只是為CBV打了個招。未在生產中使用,但會為我生成PDF??赡苄枰獮殄e誤報告方面的事情工作,但到目前為止已經可以解決問題。
import StringIO
from cgi import escape
from xhtml2pdf import pisa
from django.http import HttpResponse
from django.template.response import TemplateResponse
from django.views.generic import TemplateView
class PDFTemplateResponse(TemplateResponse):
def generate_pdf(self, retval):
html = self.content
result = StringIO.StringIO()
rendering = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
if rendering.err:
return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
else:
self.content = result.getvalue()
def __init__(self, *args, **kwargs):
super(PDFTemplateResponse, self).__init__(*args, mimetype='application/pdf', **kwargs)
self.add_post_render_callback(self.generate_pdf)
class PDFTemplateView(TemplateView):
response_class = PDFTemplateResponse
像這樣使用:
class MyPdfView(PDFTemplateView):
template_name = 'things/pdf.html'
添加回答
舉報