web-dev-qa-db-ja.com

Jadeイテレーションを使用してキーとインデックスの両方を取得する

ここで説明するように、 http://jade-lang.com/reference/ の場合、インデックスまたはキーを取得するのは簡単です。しかし、両方を取得する方法はありますか?

この:

ul
  each val, index in {"day": "Wed", "link": "url", "message": "three"}
    li#item-= index + ': ' + val

これを出力します:

<ul>
  <li id="item-">day: Wed</li>
  <li id="item-">link: url</li>
  <li id="item-">message: three</li>
</ul>

しかし、私はこれが欲しい:

<ul>
  <li id="item-0">day: Wed</li>
  <li id="item-1">link: url</li>
  <li id="item-2">message: three</li>
</ul>
21
Scott Simpson

配列を反復処理している場合にのみインデックスを取得すると思います。そのため、jadeのドキュメントはその例と少し混乱しています。これを実現するための3つのオプションを紹介します。あなた自身の冒険を選んでください!

オプション1:元の入力を保持して独自のインデックスを作成する

ul
  -var index = 0
  each val, key in {day: "Wed", link: "url", message: "three"}
    li(id="item-#{index++}") #{key}: #{val}

オプション2:入力を配列の配列に変更する

ul
  each val, index in [["day", "Wed"], ["link", "url"], ["message", "three"]]
    li(id="item-#{index}") #{val[0]}: #{val[1]}

オプション3:入力をオブジェクトの配列に変更する

ul
  each val, index in [{day: "Wed"}, {link: "url"}, {message: "three"}]
    li(id="item-#{index}") #{Object.keys(val)[0]}: #{val[Object.keys(val)[0]]}

最初のオプションはおそらくあなたが望むものですが、他のオプションは読むのが面白いかもしれません。

37
David Weldon

既に回答済みのこの質問に加えて、私はこれらのどれもPyJadeで確実に機能させることができませんでした。このヒントを参照するページを見つけることができませんが、私にとっては完全に機能しています。

これを__init__.pyファイルに追加して、enumerate関数をpyjade環境に追加します。

app.jinja_env.globals.update(enumerate=enumerate)

次に、他のPythonic列挙ループと同じようにテンプレートで使用できます。

for idx, val in enumerate(list_of_whatevs)
    {{ idx }}, {{ val }}

乾杯

1
Scott