code: def jinja2_renderer(impact_report, component):
      
      context = component.context
  
      main_template_folder = impact_report.metadata.template_folder
      loader = FileSystemLoader(
          os.path.abspath(main_template_folder))
      extensions = [
          'jinja2.ext.i18n',
          'jinja2.ext.with_',
          'jinja2.ext.loopcontrols',
          'jinja2.ext.do',
      ]
      env = Environment(
          loader=loader,
          extensions=extensions)
  
      template = env.get_template(component.template)
      rendered = template.render(context)
      if component.output_format == 'string':
          return rendered
      elif component.output_format == 'file':
          if impact_report.output_folder is None:
              impact_report.output_folder = mkdtemp(dir=temp_dir())
          output_path = impact_report.component_absolute_output_path(
              component.key)
  
          # make sure directory is created
          dirname = os.path.dirname(output_path)
          if not os.path.exists(dirname):
              os.makedirs(dirname)
  
          with io.open(output_path, mode='w', encoding='utf-8') as output_file:
              output_file.write(rendered)
          return output_path
docs: Versatile text renderer using Jinja2 Template.
  
      Render using Jinja2 template.
  
      :param impact_report: ImpactReport contains data about the report that is
          going to be generated.
      :type impact_report: safe.report.impact_report.ImpactReport
  
      :param component: Contains the component metadata and context for
          rendering the output.
      :type component:
          safe.report.report_metadata.QgisComposerComponentsMetadata
  
      :return: whatever type of output the component should be
  
      .. versionadded:: 4.0