使用Django 1.9

时间:2016-04-18 14:55:34

标签: python django django-templates pdf-generation

我想使用Django 1.9文档中的以下方法生成PDF:https://docs.djangoproject.com/ja/1.9/howto/outputting-pdf

这是我的网址模式(我不需要任何特别的内容,只是一个不同的网址名称

urlpatterns = [
   url(r'^people/$', PeopleTemplate.as_view(), name='people'),
   url(r'^people/pdf/$', some_view),
 ]

  def some_view(request):
      response = HttpResponse(content_type='application/pdf')
      response['Content-Disposition'] = 'attachment; filename="example.pdf"'
      p = canvas.Canvas(response)
      p.drawString(100, 100, "Hello world.")
      p.showPage()
      p.save()

      def get(self, request, *args, **kwargs):
          context = locals()
          context['response'] = self.response
          context['p'] = self.p
          return render_to_response(self.response_template, context, context_instance=RequestContext(request))

我试图使用get方法。当我点击/ pdf时,这会提示输出pdf,但不包含任何数据 - 只是一个空白页面。当您点击/出席/ pdf网址时,如何获取此网址/出席/中显示的数据以显示在pdf页面上?

1 个答案:

答案 0 :(得分:1)

我认为你需要:

  1. 渲染html
  2. 将其转换为pdf
  3. 将pdf内容设置为响应正文
  4. 返回回复
  5. 现在您的代码将模板呈现为html,将“application / pdf”内容类型添加到标头并返回正常的html页面。

    你需要像PDFTemplateView这样的东西。可以使用包django-easy-pdfdjango-wkhtmltopdf

    UPD:

      def some_view(request):
          response = HttpResponse(content_type='application/pdf')
          response['Content-Disposition'] = 'attachment; filename="example.pdf"'
          p = canvas.Canvas(response)
    
          // simple but visual result is not pretty at all
          for i, obj in enumerate(People.objects.all()):
              p.drawString(100, 50*(i+1), str(obj))
    
          p.showPage()
          p.save()
    
          def get(self, request, *args, **kwargs):
              context = locals()
              context['response'] = self.response
              context['p'] = self.p
              return render_to_response(self.response_template, context, context_instance=RequestContext(request))