템플릿 렌더링

아이리스는 내장된 8가지 템플릿 엔진을 지원하며, 개발자는 Context.ResponseWriter()io.Writer임으로써 Go 언어 외부의 템플릿 엔진을 여전히 사용할 수 있습니다.

모든 템플릿 엔진은 내장된 자원을 이용한 구문 분석, 레이아웃 및 Party별 레이아웃, 템플릿 함수 및 부분 렌더링을 포함한 공통 API를 공유합니다.

# 이름 구문 분석기
1 HTML html/template
2 Blocks kataras/blocks
3 Django flosch/pongo2
4 Pug Joker/jade
5 Handlebars aymerick/raymond
6 Amber eknkc/amber
7 Jet CloudyKit/jet
8 Ace yosssi/ace

각 Party에 대해 뷰 엔진을 등록할 수 있습니다. Application/Party.RegisterView(ViewEngine) 메서드를 사용하여 등록할 수 있습니다. 아래는 예시입니다:

"./views" 폴더에서 ".html" 확장자를 가지는 모든 템플릿을 로드하고 표준 html/template 패키지를 사용하여 구문 분석합니다.

// [app := iris.New...]
tmpl := iris.HTML("./views", ".html")
app.RegisterView(tmpl)

메인 라우트 핸들러에서 Context.View 메서드를 사용하여 보기를 렌더링하거나 실행합니다.

if err := ctx.View("hi.html"); err != nil {
    ctx.HTML("%s", err.Error())
    return
}

미들웨어 또는 메인 핸들러에서 Context.ViewData 메서드를 사용하여 뷰에서 키-값 패턴에 Go 값을 바인딩합니다.

{{.message}}"Hello world!"와 바인딩합니다.

ctx.ViewData("message", "Hello world!")

루트 바인딩:

if err := ctx.View("user-page.html", User{}); err != nil {
    ctx.HTML("%s", err.Error())
    return
}

// 루트 바인딩은 {{.Name}}으로 사용합니다.

선호하는 뷰 엔진AddFunc 메서드를 사용하여 템플릿 함수를 추가할 수 있습니다.

//       함수 이름, 입력 매개변수, 반환 값
tmpl.AddFunc("greet", func(s string) string {
    return "Greetings " + s + "!"
})

모든 요청마다 다시 로드 하려면, 뷰 엔진의 Reload 메서드를 호출하세요.

tmpl.Reload(true)

로컬 파일 시스템에 의존하지 않고 내장된 템플릿을 사용하려면 외부 도구 go-bindata를 사용하고, 선호하는 뷰 엔진의 첫 번째 입력 매개변수로 생성되는 AssetFile() 함수를 전달하세요.

tmpl := iris.HTML(AssetFile(), ".html")

예시 코드:

// File: main.go
package main

import "github.com/kataras/iris/v12"

func main() {
    app := iris.New()

    // "./views" 폴더에서 ".html" 접미사가 있는 모든 템플릿 구문 분석
    // 구문 분석에는 표준 `html/template` 패키지를 사용합니다
    tmpl := iris.HTML("./views", ".html")
    // 사용자 정의 구분 기호 설정
    tmpl.Delims("{{", "}}")
    // 로컬 템플릿 파일 변경을 위한 다시 컴파일 활성화
    tmpl.Reload(true)
    
    // 기본 템플릿 함수는 다음과 같습니다:
    //
    // - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
    // - {{ render "header.html" . }}
    // 그리고 현재 페이지에 대한 상대 경로:
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // 사용자 정의 템플릿 함수 등록:
    tmpl.AddFunc("greet", func(s string) string {
        return "안녕하세요 " + s + "!"
    })
    
    // 뷰 엔진을 애플리케이션에 등록,
    // 이로써 템플릿을 로드합니다.
    app.RegisterView(tmpl)
    
    // 메소드: GET
    // 리소스: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // {{.message}}를 "안녕, 세상아!"에 묶습니다
        ctx.ViewData("message", "안녕, 세상아!")
        // 템플릿 파일을 렌더링합니다: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}
안녕하세요 페이지


{{.message}}
{{greet "당신에게"}}

브라우저에서 새 탭을 열고 http://localhost:8080을 방문하십시오.

렌더된 결과는 다음과 같아야 합니다:

    안녕하세요 페이지


    안녕, 세상아!
    안녕하세요 당신에게!