2016-12-20 1 views
1

Go에서 html/template을 사용하여 구문 분석 한 내 관리/시스템 값을 모두 포함하는 구조체를 전달하고 싶습니다. 예를 들어, .IsAuthenticated 및 .IsAdmin을 명시 적으로 처리기를 통해 전달하지 않고 기본적으로 내보기에 제공하고 싶습니다.처리기 외부의 html/template에 값 전달

처리기를 거치지 않고 이러한 값을 항상 기본값으로 사용할 수있게 할 수 있습니까? 처리기를 통해 양식 값 및 기타 사용자 생성 콘텐츠를 전달하고 싶습니다.

답변

2

응용 프로그램이 값을 템플릿에 전달하지 않고도 관리자/시스템 구조체에 액세스 할 수 없습니다. 값을 전달하는 편리한 방법은 각보기 유형의 익명 필드를 사용하는 것입니다. 다음은 예입니다 :

AdminStuff 당신의 관리자 및 시스템 데이터 및 getAdminSystemStuff(*http.Request)를 포함하는 구조체라고 가정은 요청에서 구조체에 대한 포인터를 가져옵니다 기능이있다,이 같은 뷰 데이터를 정의 :

func myHandler(w http.Response, r *http.Request) { 
    var data = struct { 
    *AdminSystemStuff 
    AFieldSpecificToThisView string 
    AnotherViewField string 
    }{ 
    getAdminSystemStuff(r), 
    "hello", 
    "world" 
    } 
    err := t.Execute(w, &data) // t is the compiled template. 
    if err != nil { 
    // handle error 
    } 
} 

이 같은 템플릿이 사용할 수 있습니다 : 내 예를 들어, 응용 프로그램이 추가하려

<html> 
<body> 
Here are some fields: {{.AFieldSpecificToThisView}} {{.AnotherViewField}} 
{{if .IsAuthenticated}}The user is authenticated{{end}} 
</body> 
</html> 
+0

,하지만 특정 구성 요소가 이동하는 위치를 모르겠어요 당신은 파일 이름을 게시시겠습니까 (예 : 구조체로.) 각 섹션마다 이렇게 재현하는 방법을 알 수 있습니까? 나는 아주 새롭다! – dingalingchickenwiing

+0

수정 해 주셔서 대단히 감사합니다. 어떻게 작동하는지 봅니다. – dingalingchickenwiing