code: func (p *Engine) LoadAssets(virtualDirectory string, virtualExtension string, assetFn func(name string) ([]byte, error), namesFn func() []string) error {
  	var templateErr error
  	/*fsLoader, err := pongo2.NewLocalFileSystemLoader(virtualDirectory)
  	if err != nil {
  		return err
  	}*/
  	set := pongo2.NewSet("", pongo2.DefaultLoader)
  	set.Globals = getPongoContext(p.Config.Globals)
  
  	// set the filters
  	filters := p.convertFilters()
  	for filterName, filterFunc := range filters {
  		pongo2.RegisterFilter(filterName, filterFunc)
  	}
  
  	if len(virtualDirectory) > 0 {
  		if virtualDirectory[0] == '.' { // first check for .wrong
  			virtualDirectory = virtualDirectory[1:]
  		}
  		if virtualDirectory[0] == '/' || virtualDirectory[0] == os.PathSeparator { // second check for /something, (or ./something if we had dot on 0 it will be removed
  			virtualDirectory = virtualDirectory[1:]
  		}
  	}
  
  	p.mu.Lock()
  	defer p.mu.Unlock()
  
  	names := namesFn()
  	for _, path := range names {
  		if !strings.HasPrefix(path, virtualDirectory) {
  			continue
  		}
  
  		rel, err := filepath.Rel(virtualDirectory, path)
  		if err != nil {
  			templateErr = err
  			return err
  		}
  
  		ext := filepath.Ext(rel)
  		if ext == virtualExtension {
  
  			buf, err := assetFn(path)
  			if err != nil {
  				templateErr = err
  				return err
  			}
  			name := filepath.ToSlash(rel)
  			p.templateCache[name], err = set.FromString(string(buf))
  			if err != nil {
  				templateErr = err
  				return err
  			}
  		}
  	}
  	return templateErr
  }
docs: // LoadAssets loads the templates by binary