code: public String renderIfTemplateExists(String template, Object... args) {
          boolean typeInferenceEnabled = conf().typeInferenceEnabled();
          if (typeInferenceEnabled) {
              ParamTypeInferencer.registerParams(this, args);
          }
  
          if (nonExistsTemplates.contains(template)) return "";
  
          String key = template;
          if (typeInferenceEnabled) {
              key += ParamTypeInferencer.uuid();
          }
  
          try {
              TemplateClass tc = classes().getByTemplate(template);
              if (null == tc) {
                  ITemplateResource rsrc = resourceManager().getResource(template);
                  if (rsrc.isValid()) {
                      tc = new TemplateClass(rsrc, this);
                      //classes().add(key, tc);
                  } else {
                      nonExistsTemplates.add(template);
                      if (isDevMode() && nonExistsTemplatesChecker == null) {
                          nonExistsTemplatesChecker = new NonExistsTemplatesChecker();
                      }
                      return "";
                  }
              }
              ITemplate t = tc.asTemplate(this);
              setRenderArgs(t, args);
              return t.render();
          } finally {
              renderCleanUp();
          }
      }
docs: Render template if specified template exists, otherwise return empty string
  
  @param template the template source path
  @param args     render args. See {@link #getTemplate(String, Object...)}
  @return render result