code: def get_frontend_data_dict_for_partials(partials, request, editable=False, renderer=None):
      
  
      # Split static placeholders from partials that have a custom callback.
      static_placeholder_names = []
      custom_callback_partials = []
      for partial in partials:
          if partial in settings.DJANGOCMS_SPA_PARTIAL_CALLBACKS.keys():
              custom_callback_partials.append(partial)
          else:
              static_placeholder_names.append(partial)
  
      # Get the data of all static placeholders
      use_static_placeholder_draft = (hasattr(request, 'toolbar') and request.toolbar.edit_mode and
                                      request.user.has_perm('cms.edit_static_placeholder'))
      static_placeholders = []
      for static_placeholder_name in static_placeholder_names:
          static_placeholders.append(get_static_placeholder(static_placeholder_name, use_static_placeholder_draft))
  
      partial_data = get_frontend_data_dict_for_placeholders(
          placeholders=static_placeholders,
          request=request,
          editable=editable
      )
  
      # Get the data of all partials that have a custom callback.
      for partial_settings_key in custom_callback_partials:
          dotted_function_module_path = settings.DJANGOCMS_SPA_PARTIAL_CALLBACKS[partial_settings_key]
          callback_function = get_function_by_path(dotted_function_module_path)
          partial_data[partial_settings_key] = callback_function(request, renderer)
  
      return partial_data
docs: We call global page elements that are used to render a template `partial`. The contents of a partial do not
      change from one page to another. In a django CMS project partials are implemented as static placeholders. But
      there are usually other parts (e.g. menu) that work pretty much the same way. Because we don't have a template
      that allows us to render template tags, we need to have a custom implementation for those needs. We decided to
      use a `callback` approach that allows developers to bring custom data into the partial list.
  
      To prevent infinite recursions when using callbacks we have the `renderer` parameter.