Получите как ключ, так и индекс, используя итерацию 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>

Ответы

Ответ 1

Я думаю, что вы получаете индекс только в том случае, если вы выполняете итерацию по массиву, поэтому документация по нефриту немного запутана с его примером. Я дам вам три варианта, как это сделать. Выберите свое приключение!

вариант 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]]}

Первый вариант - это, вероятно, то, что вы хотите, но другие могут быть интересны для чтения.

Ответ 2

Чтобы добавить к этому уже ответили вопрос, я не смог заставить их работать над PyJade. Я не могу найти страницу, которая ссылалась на этот отзыв, но она отлично работала для меня.

Добавьте это в свой __init__.py файл, чтобы добавить функцию enumerate в среду вашего пияда.

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

Затем вы можете использовать его в своих шаблонах, как и любой другой цикл pythonic enumeration:

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

Приветствия