2016-06-10 73 views
0

我想下载一些pdfs,对应于len(list_element)。我用一个列表创建PDF(我使用这个列表中的2个元素来“写”pdf),但我可以下载第一个pdf,而不是其他列表。谢谢你的帮助。Django - 多PDFTemplateResponse(wkhtmltopdf)

class CreatePDFCSVView(PDFTemplateView): 

"""View to create PDF.""" 
context = {} 

def get(self, request, *args, **kwargs): 
    """Create the PDF for the model.""" 
    self.context['object'] = get_object_or_404(LabelModel, pk=kwargs['pk']) 
    object_label = self.context['object'] or False 

    list_element_csv = [] 
    list_element = [] 
    with io.open("media/list_file", "r") as infile: 
     str_path = infile.read() 

    csvname = open(str_path, 'rb') 
    reader = csv.reader(codecs.iterdecode(csvname, 'utf-8'), delimiter=";") 
    for row in reader: 
     list_element_csv.append(row) 

    i=0 
    while i < len(list_element_csv): 
     if i==0: 
      header = list_element_csv[i] 
      i+=1 
     y=0 
     while y < len(list_element_csv[i]): 
      list_element.append(list_element_csv[i][y]) 
      y+=1 
     i+=1 

    imgdatabase = Image.objects.all() 

    while len(list_element) != 0 : 
     list_csv_pdf = [] 
     list_csv_pdf.append(list_element[0]) 
     list_csv_pdf.append(list_element[1]) 
     filename = 'model.pdf' 
     cmd_options = { 
      'page-height' : object_label.format_label.height, 
      'page-width' : object_label.format_label.width, 
      'margin-top' : object_label.format_label.margin_top, 
      'margin-left' : object_label.format_label.margin_left, 
      'margin-right' : object_label.format_label.margin_right, 
      'margin-bottom' : object_label.format_label.margin_bottom 
     } 

     if object_label: 
      filename = '%s_%s.pdf' %(object_label.labelModel_name, len(list_element)) 
      template_name = object_label.template_model.path 
      self.context['object'] = object_label 
      self.context['list_csv_pdf'] = list_csv_pdf 
      for queryset in imgdatabase: 
       str_img = "%s_%s" %('Image', queryset.name_img) 
       absolute_path = os.path.join(PATH_IMAGE_HTML, queryset.link_img.url) 
       self.context[str_img] = absolute_path 

     response = PDFTemplateResponse(
      request = request, 
      template = template_name, 
      filename = filename, 
      context = self.context, 
      show_content_in_browser = False, 
      cmd_options = cmd_options 
     ) 
     list_element.pop(0) 
     list_element.pop(0) 

     return response 

回答

0

在你上一个while循环中,你做了return response。这将在第一次迭代中发生。所以你只需要返回一个pdf回应。其余从未处理。

但是,无论如何您都无法在一个响应中返回多个文档。要做到这一点,你可以为例如。创建一个包含多个文件的zip文件。

代码中的那些while循环应该被更短,更好的可读性和更少出错的循环替换。