2013-03-04 3 views
4

목표 : 일부 문자열에서 줄 바꿈을 <br/> 태그로 변경하려는 HTTP 서버에서 여러 템플릿 사용.FuncMap을 사용한 여러 템플릿

Template a {{dosomething}} 

(및 유사한 다른 템플릿) : I는 다음과 같이 두 개의 템플릿 a.tmplb.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이 알려져 있지 않다.

  1. 여러 템플릿에서 내 기능을 어떻게 사용할 수 있습니까? this question here on so에 대한 대답은 갈 유일한 방법입니까?
  2. 올바른 방법입니까? 일부 문자열에서 문서의 제목 예제 (http://golang.org/pkg/text/template/#FuncMap - 예 (Func))와 비슷한 텍스트를 변경하고 싶습니다.
  3. 어떻게 다음 코드 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) 
    } 
    

답변

3

귀하의 마지막 조각은 나에게 잘 대해 보인다.

그냥 전화, b.tmpl 렌더링하려면

t.ExecuteTemplate(w, "b.tmpl", data) 
당신은 같은 방법으로 a.tmpl에 액세스 할 수 있습니다

; New에 대한 호출에서 이름을 "a.tmpl"로 설정하는 대신 일관성을 위해이 작업을 수행하는 것이 좋습니다.

+0

대답의 두 번째 부분 인 'a.tmpl'에 같은 방법으로 액세스하는 방법을 이해하지 못합니다. 새와'ParseGlob (...) '같은 "inbetween"와 같은 것을'Funcs (funcMap)'이라고 부를 필요가 있습니다. – topskip

+0

@topskip 저는 t.ExecuteTemplate (w, "a.tmpl" , 데이터)를 호출하는 대신 t.Execute (w, data)를 호출합니다. 그렇게하면 두 개의 템플릿이 동일하게 취급됩니다. 그런 다음 모든 템플릿 세트를 "a.tmpl"보다 더 나은 이름으로 지정할 수 있습니다. – andybalholm

+2

이것은 내가 지금 가지고있는 것이다 :'t, err : = template.New ("") .Funcs (funcMap) .ParseGlob ("templates/*. tmpl")'그리고 나서't.ExecuteTemplate (os.Stdout, b.tmpl ","hello ")'- 이것은 정상적으로 작동합니다. 다른 템플릿과 동일합니다. 감사! – topskip

관련 문제