한 클래스 내에서 여러 템플릿 엔진을 사용하는 방법은 무엇입니까?

일반적으로 하나의 프로젝트에 하나의 템플릿 엔진을 사용합니다.
그러나 하나의 프로젝트 내에서 여러 템플릿 엔진을 사용할 수 있습니다. 많은 템플릿을 초기화하고 개별적으로 사용할 수 있습니다.



Aex 을 사용하면 훨씬 더 간단하게 할 수 있습니다.

init 함수 내에서 템플릿 엔진을 초기화하고 관련 매개변수를 init 함수에 전달할 수 있습니다.
또는 이 init 함수를 분리된 파일의 공유 함수로 래핑할 수 있습니다.

aex 에서는 웹 핸들러용 템플릿을 준비하는 데 도움이 되는 template 데코레이터를 제공합니다.
template 데코레이터를 사용하는 방법에 대한 자세한 내용은 here에서 확인할 수 있습니다.

다음은 템플릿 엔진nunjuckspug가 여기에서 사용되는 여러 템플릿 엔진의 모습입니다.

class Template {
  @http("/one")
  @template(
    // init function
    (path) => {
    const loader = new nunjucks.FileSystemLoader([path], {});
    const env = new nunjucks.Environment(loader, {
      autoescape: false,
    });
    return env;
  }, resolve(__dirname, "./views"))
  public async name(_: any, res: any) {
    // access using res.render
    res.render("index.html", { hello: "Hello" });
  }

  @http("/pug")
  @template((path) => {
    const engine: any = {};

    // engine render function rewrite
    engine.render = function (name: string, data: any) {
      let file = name;
      if (!existsSync(name)) {
        if (!existsSync(resolve(path, name))) {
          throw new Error("File Not Found: " + resolve(path, name));
        } else {
          file = resolve(path, name);
        }
      }
      return pug.renderFile(file, data);
    };
    return engine;
  }, resolve(__dirname, "./views"))
  public async name2(_: any, res: any, scope: any) {
    // access using scope.engine
    res.end(scope.engine.render("index.pug", { hello: "Hello" }));
  }
}

좋은 웹페이지 즐겨찾기