docs: def render_template(self, template, context=None, filepath=None):
          """Render a single :class:`jinja2.Template` object.
  
          If a Rule matching the template is found, the rendering task is
          delegated to the rule.
  
          :param template:
              A :class:`jinja2.Template` to render.
  
          :param context:
              Optional. A dictionary representing the context to render
              *template* with. If no context is provided, :meth:`get_context` is
              used to provide a context.
  
          :param filepath:
              Optional. A file or file-like object to dump the complete template
              stream into. Defaults to to ``os.path.join(self.outpath,
              template.name)``.
  
          """
          self.logger.info("Rendering %s..." % template.name)
  
          if context is None:
              context = self.get_context(template)
  
          if not os.path.exists(self.outpath):
              os.makedirs(self.outpath)
          self._ensure_dir(template.name)
  
          try:
              rule = self.get_rule(template.name)
          except ValueError:
              if filepath is None:
                  filepath = os.path.join(self.outpath, template.name)
              template.stream(**context).dump(filepath, self.encoding)
          else:
              rule(self, template, **context)