Джекил / жидкость для петли таинственна
Я пытаюсь использовать цикл 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 %}