Iterate over hashes in liquid templates

Brian Hicks picture Brian Hicks · Nov 21, 2011 · Viewed 22.5k times · Source

I'm writing a site in Jekyll, which uses Liquid.

I have front matter for pages that I'd like to look like this:

---
title: Designing algorithms that scale horizontally
speaker: Luke Ehresman, CopperEgg
category: notes.mongodallas.talks
links:
 - demo: http://www.github.com/copperegg/mongo-scaling-demo
layout: talknotes
---

In Liquid, the links section of YAML comes through as:

[{'demo' => 'http://www.github.com/copperegg/mongo-scaling-demo' }]

I'd like to be able to iterate over the array, doing something like this:

<a href="{{ link.value }}">{{ link.key }}</a>

But any ideas I've had so far have failed me.

Answer

kikito picture kikito · Nov 29, 2011

When you iterate over a hash using a variable called hash, hash[0] contains the key and hash[1] contains the value on each iteration.

{% for link_hash in page.links %}
  {% for link in link_hash %}
    <a href="{{ link[1] }}">{{ link[0] }}</a>
  {% endfor %}
{% endfor %}