docs: def process_views(self):
          """Processes the loaded views to generate the required output data."""
          output = {}
          logger.debug("Processing %d view(s)...", len(self.views))
          for view_name, view in iteritems(self.views):
              try:
                  output = deep_merge_dict(
                      output,
                      view.process(
                          self.db,
                          safe_mode=self.safe_mode,
                          extra_context=self.project_context
                      )
                  )
              except StatikError as exc:
                  # just re-raise it
                  raise exc
  
              except Exception as exc:
                  # for unhandled view-related exceptions, raise our own exception
                  raise ViewError(
                      message="Failed to render view \"%s\"." % view_name,
                      orig_exc=exc
                  )
  
          return output