Джекил / жидкость для петли таинственна

Я пытаюсь использовать цикл for в Jekyll для рендеринга данных примера. Я могу ссылаться на объекты уценки или как бы они ни вызывались напрямую, но когда я использую цикл for, это не работает. Вот пример проблемы, с которой я столкнулся:

файл уценки с данными:

tests:  
  test1:  
    number: 1 . 
  test2:  
    number: 2 . 
  test3:  
    number: 3 . 

sessions.html:

<p>{{ page.tests.test1.number }}</p>
<p>{{ page.tests.test2.number }}</p>
<p>{{ page.tests.test3.number }}</p>

Это приводит к:

<p>1</p>
<p>2</p>
<p>3</p>

Если я сделаю это вместо этого:

{% for test in page.tests %}
  <p>{{ test.number }}</p>
{% endfor %}

Я получил:

<p></p>
<p></p>
<p></p>

Я даже могу сделать это:

{% for test in page.tests %}
  <p>{{ test }}</p>
{% endfor %}

И получить:

<p>test1{"number"=>1}</p>
<p>test2{"number"=>2}</p>
<p>test3{"number"=>3}</p>

Есть идеи, что я делаю не так?

1 ответ

Решение

Взгляните на это:

{% for test in page.tests %}
  <p>{{ test.number }}</p>
{% endfor %}

Вы перебираете page.tests, поскольку page.tests это хеш, а не список, вы перебираете пары ключ-значение этого объекта. (См. Эту тему).

Ключи test1, test2 а также test3Вы можете получить к ним доступ с test[0],

Но вам нужно значение, в этом случае вы можете использовать test[1], и чтобы получить номер, вы можете позвонить test[1].number:

{% for test in page.tests %}
  <p>{{ test[1].number }}</p>
{% endfor %}

И вы получите тот же результат, что и в первом примере.

Или вместо test1, test2 а также test3Вы можете попытаться определить список:

tests:
  - number: 1
  - number: 2
  - number: 3

Таким образом, ваш код тоже будет работать:

{% for test in page.tests %}
  <p>{{ test.number }}</p>
{% endfor %}
Другие вопросы по тегам