템플릿
- 템플릿 엔진이 생성하는 미리 만들어진 HTML 페이지로 프로그램에서 반복적으로 사용된다.
템플릿 엔진
- 데이터와 템플릿을 합쳐 궁극적으로 HTML을 만들어 낸다.
- 핸들러는 템플릿 엔진을 호출하여 데이터와 템플릿을 합쳐 클라이언트에 HTML 결과를 반환한다.
- 템플릿 엔진은 크게 두가지 유형이 있다.
1. 로직 최소화 템플릿 엔진(Logic-less template engines)
- 동적 데이터는 템플릿에 전달 돼 명시화된 placeholders에 실제 데이터가 대체된다.
- 어떠한 로직 처리를 진행하지 않고 오로지 문자열만 대체하여 로직은 핸들러에서만 처리한다.
2. 내장 로직 템플릿 엔진(Embedded logic template engines)
- 템플릿 내부에 프로그래밍 언어 코드를 삽입하여 템플릿 엔진에 의해 실행될 수 있다.
- Go 템플릿 엔진은 html/template, text/template에 있는 기본 라이브러리가 있다.
Go 템플릿 엔진
- Go 템플릿 엔진은 핸들러에 의해 호출이 된다.
- 핸들러는 템플릿 엔진을 호출하고, 템플릿에 데이터를 전달해 동적인 템플릿 파일 리스트를 생성한다.
- HTML을 생성하거나 쓰기 작업을 ResponseWriter를 통해 수행하며 클라이언트에 응답을 주기도 한다.
- 행동(Action)을 추가하기 위해서는 특정 행동을 {{ }}와 같이 이중 중괄호로 감싼다.
example
- index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Go Web Programming</title>
</head>
<body>
{{.}}
</body>
</html>
- main.go
package main
import (
"html/template"
"net/http"
)
func process(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("index.html")
t.Execute(w, "Hello world!")
}
func main() {
server := http.Server{
Addr : "127.0.0.1:8080",
}
http.HandleFunc("/process", process)
server.ListenAndServe()
}
1. 텍스프 포맷 템플릿 소스(index.html)를 해석하고 템플릿 구조를 생성한다.
2. 템플릿 엔진은 데이터와 템플릿을 결합해 HTML을 생성하고 생성결과를 ResponseWriter에 전달합니다.
템플릿 파싱
- 파싱관련함수
template.ParseFiles("index.html") - 템플릿 파싱 여려개의 인자를 받아 중첩 템플릿 형태를 만들 수 있다.
template.ParseGlob("*.html") - 패턴 매칭을 이용한 템플릿 파싱
template.Parse(data) - string의 템플릿을 파싱
template.Must - Must is a helper that wraps a call to a function returning (*Template, error) and panics if the error is non-nil. It is intended for use in variable initializations (에러가 nil이 아닐 때 발생할경우를 처리할 때 사용)
템플릿 실행
t, _ := template.ParseFiles("index.html")
t.Execute(w, "Hello World!")
t, _ := template.ParseFiles("t1.html", "t2.html") // 2개의 템플릿을 취함
t.Execute(w, "Hello world!") // parse한 맨 앞의 html인 t1.html이 실행
t.ExecuteTemplate(w, "t2.html", "Hello world!") // t2.html이 실행되길 원할 때 사용
'Language > Go' 카테고리의 다른 글
[Go] - web programming : 상황 인지, XSS 공격 막기 (0) | 2020.01.16 |
---|---|
[Go] - web programming : 액션 (0) | 2020.01.16 |
[Go] - web programming : 쿠키 cookie (0) | 2020.01.06 |
[Go] - web programming : request 처리 및 response 작성 (1) | 2020.01.04 |
[Go] - web programming : handler 기초 (0) | 2020.01.03 |