템플릿 렌더링
아이리스는 내장된 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을 방문하십시오.
렌더된 결과는 다음과 같아야 합니다:
안녕하세요 페이지
안녕, 세상아!
안녕하세요 당신에게!