2017-08-15 4 views
1

私はhttps://groups.google.com/forum/#!topic/golang-nuts/CUbdaHkESJkでこの質問をしましたが、回答はありませんでした。テンプレートからHTMLテンプレートを返す方法.FuncMap?

私はWeb based media viewerと書いています。さまざまなメディアをマークアップする方法については、私は悩んでいます。

私の現在のコードはここにあります:https://github.com/kaihendry/lk/blob/5de96f9fe012e9894deef7b9924f96dd8d9c806c/main.go#L181 は間違いです。理想的には私がHTMLを使用するhttps://play.golang.org/p/mAue8SDDw6

:私は...

縮小たとえば、私は文字列だけを使用template.FuncMapを使用しての参照https://golang.org/pkg/html/template/#Template.Execute

全ての実施例に照らして、ここでテンプレートを使用するかどうかは困惑していますfmt.Sprintfではなく、ここにテンプレートがあります。はい、私は間違っているファイル名をエスケープするHTMLではないことを認識していますが、この関数からHTMLテンプレートを再度使用する方法がわかりません。任意の指導を事前に

おかげで、

答えて

3

あなたはプレゼンテーション(テンプレート)からロジック(機能)を分離する必要があります。 template.FuncMapに登録されている関数は、出力を生成するための入力としてテンプレートに依存してはいけません。 HTMLテンプレートを関数の出力として返す場合は、手動で生成する必要があります(fmt.Sprintfなどを使用)。

あなたのケースでは、単にメディアタイプをチェックする関数を登録し、テンプレートの{{if}}アクションを使用して異なる出力を生成することができます。以下のように機能することができるルックス:

{{ range .Media }}<p> 
    {{if . | matchType ".jpg"}}<img src={{.}}> 
    {{else if . | matchType ".mp4"}}<video controls src={{.}}></video> 
    {{else}}{{.}} 
    {{end}}</p> 
{{ end }} 

あなたの低下の例をもとに作業例:

func matchType(ext, s string) bool { 
    return strings.ToLower(ext) == strings.ToLower(path.Ext(s)) 
} 

とテンプレートは次のようになりますhttps://play.golang.org/p/U64_7UHZQU

+0

ありがとう、アプローチはかなり良さそうです、 "if、else、else、else"型構造が好きかどうかはわかりません。 – hendry

関連する問題