2013-01-06 16 views
9

GAE GOのhtmlテンプレートで条件文を実行するにはどうすればよいですか?私は選択htmlタグで選択したオプションを作るために、これを達成しようとしていた。GAE Goテンプレートの条件文

<select name=".Grade"> 
      <option value=""></option> 
      <option value="1" {{ if .Grade="1" }} selected="selected" {{ end }}>Grade One</option> 
      <option value="2" {{ if .Grade="2" }} selected="selected" {{ end }}>Grade Two</option> 
      <option value="3" {{ if .Grade="3" }} selected="selected" {{ end }}>Grade Three</option> 
      <option value="4" {{ if .Grade="4" }} selected="selected" {{ end }}>Grade Four</option> 
      <option value="5" {{ if .Grade="5" }} selected="selected" {{ end }}>Grade Five</option> 
      <option value="6" {{ if .Grade="6" }} selected="selected" {{ end }}>Grade Six</option> 
</select> 

あり

{{ if .Grade }} selected="selected" {{ end }} 

が基準ドキュメントにあるが.Gradeが値を持っている場合にのみtrueに評価されます。どんな助けも高く評価されます。ありがとう!

答えて

15

基本テンプレートパッケージには等価文はありません。
interesting discussion from golang-nutsです。

あなたはいくつかの可能性があります。

  • は1ラス・コックスがgolangナットのスレッドで提案するように、平等のための外部関数を定義し、基本テンプレートパッケージに何かを使用し
  • if条件でテストをあなたが理解することができます(私のコードを参照してください)
  • テンプレートからいくつかのロジックを削除:ハードコードされたフィールドが6つではなく、selectedブールフィールドを持つデータ型を構築し、これらのオブジェクトの6つの配列をrangeステートメント

私はブールのスライスを使って、あなたの例を再作成:

func main() { 
    temp,err := template.ParseFiles("template.html") 
    if err != nil { 
     panic(err) 
    } 

    g := make([]bool, 7) 
    g[1] = true 
    temp.Execute(os.Stdout, &g) 
} 

テンプレート内の行を次のようになります。これは、私にはとても良い見ていない

<option value="3"{{ if index . 3 }} selected="selected"{{ end }}>Grade Three</option> 

。しかし、私は、すべてのソリューションには欠点があり、これは味の問題であると言います(3番目のソリューションはより洗練されているべきですが、単純なことのために過剰なものとみなされるかもしれません)。

編集(2013年12月11日)Go 1.2

released on 2013/12/01)、template engineが更新され、比較などの新しい演算子が含まれています。これで、期待どおりに動作するはずです。

{{if eq .Grade 1 }} selected="selected" {{end}} 

テンプレートでできるだけ論理を保つように選択することはできますが、

+1

go 1.2リリース – ithkuil