4
목표 : 일부 문자열에서 줄 바꿈을 <br/>
태그로 변경하려는 HTTP 서버에서 여러 템플릿 사용.FuncMap을 사용한 여러 템플릿
Template a {{dosomething}}
(및 유사한 다른 템플릿) : I는 다음과 같이 두 개의 템플릿 a.tmpl
및 b.tmpl
이
:
는 예를 벗었. 둘 다 templates
이라는 디렉토리에 있습니다. 내가 \n
-><br />
교체 (위의 dosomething
) 작업을 수행해야한다고 생각합니다.
이 내 (비 작동) 샘플 코드입니다 :
package main
import (
"log"
"text/template"
)
func main() {
// funcMap := template.FuncMap{
// "dosomething": func() string { return "done something" },
// }
templates, err := template.ParseGlob("templates/*.tmpl")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", templates)
}
오류 메시지는 다음과 같습니다
때문에 분석 시간 동안, 의미가2013/03/04 20:08:19 template: a.tmpl:1: function "dosomething" not defined
exit status 1
, 기능 dosomething
이 알려져 있지 않다.
- 여러 템플릿에서 내 기능을 어떻게 사용할 수 있습니까? this question here on so에 대한 대답은 갈 유일한 방법입니까?
- 올바른 방법입니까? 일부 문자열에서 문서의 제목 예제 (http://golang.org/pkg/text/template/#FuncMap - 예 (Func))와 비슷한 텍스트를 변경하고 싶습니다.
어떻게 다음 코드
b.tmpl
액세스합니까 : 코드의package main import ( "log" "text/template" ) func main() { funcMap := template.FuncMap{ "dosomething": func() string { return "done something" }, } t, err := template.New("a.tmpl").Funcs(funcMap).ParseGlob("templates/*.tmpl") if err != nil { log.Fatal(err) } log.Printf("%#v", t) }
대답의 두 번째 부분 인 'a.tmpl'에 같은 방법으로 액세스하는 방법을 이해하지 못합니다. 새와'ParseGlob (...) '같은 "inbetween"와 같은 것을'Funcs (funcMap)'이라고 부를 필요가 있습니다. – topskip
@topskip 저는 t.ExecuteTemplate (w, "a.tmpl" , 데이터)를 호출하는 대신 t.Execute (w, data)를 호출합니다. 그렇게하면 두 개의 템플릿이 동일하게 취급됩니다. 그런 다음 모든 템플릿 세트를 "a.tmpl"보다 더 나은 이름으로 지정할 수 있습니다. – andybalholm
이것은 내가 지금 가지고있는 것이다 :'t, err : = template.New ("") .Funcs (funcMap) .ParseGlob ("templates/*. tmpl")'그리고 나서't.ExecuteTemplate (os.Stdout, b.tmpl ","hello ")'- 이것은 정상적으로 작동합니다. 다른 템플릿과 동일합니다. 감사! – topskip