11

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

<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と評価されます。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

18

基本テンプレートパッケージにはequalityステートメントはありません。
これは、golang-nutsからの興味深い議論です。

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

  • Russ Coxがgolang-nutsスレッドで提案しているような、平等のための外部関数を定義し、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( 2013/12/01にリリース)では、テンプレートエンジンが更新され、比較を含む新しい演算子が含まれています。これで、期待どおりに機能するはずです。

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

ただし、テンプレートに含めるロジックをできるだけ少なくすることもできます。

于 2013-01-06T07:55:33.510 に答える