Джекил / жидкость для петли таинственна - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь использовать цикл 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 Ответ

0 голосов
/ 06 июля 2018

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

{% 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 %}
...