2017-01-27 1 views
0

goテンプレートの文字列にハイフン(-)を追加したいとき、誰かがそれを保存しようとします。 https://golang.org/doc/articles/wiki/go html/templateのデータに関数を実行する

コード:

<h1>Editing {{.Title}}</h1>                
<form action="/save/{{.Title}}" method="POST">           
    <div><input name="title" type="text" placeholder="title"></div>      
    <div><textarea name="body" rows="20" cols="80">{{printf "%s" .Body}}</textarea></div> 
    <div><input type="submit" value="Save"></div>           
</form>                   

<form action="/save/{{.Title}}" method="POST"> 

持つ行が該当する行である私は、ここに行くのwikiのチュートリアルから一部変更されたコードを使用しています。私は.Titleを「クイックブラウンキツネ」のようなものに変換する必要があります。「クイックブラウンキツネ」。

上記のコードでわかるように、printlnのような機能を追加することはできますが、私の場合はどうすればよいのか分かりません。

答えて

2

あなたがテンプレートにtemplate.FuncMapを渡すことができ、その後、あなたのような何かを行うことができます。

{{ .Title | title }} 

https://play.golang.org/p/KWy_KRttD_

func Sluggify(s string) string { 
    return strings.ToLower(s) //for example 
} 

func main() { 
    funcMap := template.FuncMap { 
     "title": Sluggify, 
    } 

    tpl := template.Must(template.New("main").Funcs(funcMap).Parse(`{{define "T"}}Hello {{.Title | title }} Content: {{.Content}}{{end}}`)) 
    tplVars := map[string]string { 
     "Title": "Hello world", 
     "Content": "Hi there", 
    } 
    tpl.ExecuteTemplate(os.Stdout, "T", tplVars) 
} 
1

すべての*ページ構造体は、loadPage関数によって作成されます。だから、それだけで、あなたのハイフン付きのタイトルを作成し、ページ構造体に保管するのが最も簡単であるように見えるでしょう:

type Page struct { 
    Title string 
    HyphenTitle string 
    Body []byte 
} 

func loadPage(title string) (*Page, error) { 
    filename := title + ".txt" 
    body, err := ioutil.ReadFile(filename) 
    if err != nil { 
     return nil, err 
    } 
    return &Page{Title: title, Body: body, HyphenTitle: hyphenate(title)}, nil 
} 

func hyphenate (s string) string { 
    return strings.Replace(s," ","-",-1) 
} 

あなたがそれをしたい場所それからちょうど{{.HyphenTitle}}を使用しています。

関連する問題