code: def render(self, *args, **kwargs):
          
          # args kwargs API provided for last minute content injection
          # self._reverse_mro_func('pre_render')
          pretty = kwargs.pop("pretty", False)
          if pretty and self._stable != "pretty":
              self._stable = False
  
          for arg in args:
              self._stable = False
              if isinstance(arg, dict):
                  self.inject(arg)
          if kwargs:
              self._stable = False
              self.inject(kwargs)
  
          # If the tag or his contents are not changed and we already have rendered it
          # with the same attrs we skip all the work
          if self._stable and self._render:
              return self._render
  
          pretty_pre = pretty_inner = ""
          if pretty:
              pretty_pre = "\n" + ("\t" * self._depth) if pretty else ""
              pretty_inner = "\n" + ("\t" * self._depth) if len(self.childs) > 1 else ""
          inner = self.render_childs(pretty) if not self._void else ""
  
          # We declare the tag is stable and have an official render:
          tag_data = (
              pretty_pre,
              self._get__tag(),
              self.render_attrs(),
              inner,
              pretty_inner,
              self._get__tag()
          )[: 6 - [0, 3][self._void]]
          self._render = self._template % tag_data
          self._stable = "pretty" if pretty else True
          return self._render
docs: Renders the element and all his childrens.