code: def build_page(self, template_id, flowable_map):
          
          pt = self.get_page_template(template_id)
          # If this is the first page then ensure the page template is ordered first and no breaks or changes
          # are requested otherwise blank page shows up
          if self.active_template_id is None:
              self.make_template_first(template_id)
              self.story.append(NextPageTemplate(template_id))
              self.inc_cover and self.story.append(PageBreak())
              self.active_template_id = template_id
          elif self.active_template_id == template_id:
              # TODO - understand why this is necessary to not get a blank page between pages
              self.story.append(PageBreak())
          else:
              self.story.append(NextPageTemplate(template_id))
              self.story.append(PageBreak())
              self.active_template_id = template_id
  
          for idx, frame in enumerate(pt.frames):
              if frame.id not in flowable_map:
                  # Add a note to the template to show that nothing was defined for this area
                  self.story.append(Paragraph('NOT DEFINED: %s' % frame.id, getSampleStyleSheet()['Normal']))
              else:
                  flowables = flowable_map[frame.id]
                  if not isinstance(flowables, Flowable) and hasattr(flowables, '__iter__'):
                      [self.story.append(f) for f in flowables]
                  else:
                      self.story.append(flowables)
              if idx < (len(pt.frames) - 1):
                  self.story.append(FrameBreak())
          return self
docs: Build a pdf page by looking up the specified template and then mapping the flowable_map items to the
          appropriate named Frame