Jekyll _data:如何将键值标签显示为值,而不仅仅是键的值

时间:2018-02-10 07:31:44

标签: for-loop jekyll liquid

我的数据文件示例如下:

_data / equipment.yaml

- ip_address: 192.168.0.1
   model: Netgear Whatever
   department: network
   location: Tempe, Arizona
   devicetype: Router
 - ip_address: 192.168.0.2
   model: T2000
   department: time travel
   location: 2035
   devicetype: weaponry

现在,我已经设法通过记录创建一个循环,按部门对它们进行分组,在_includes/equipment_list.html调用的_pages/equipment_list_network.md文件中将它们分别显示在自己的表中。

我遇到的问题是如何让第一个<tr><td>将关键标签显示为每个表格的第一个<tr>中的列标题。

所以,表格如下:

| IP Address | Model | Department | Location | Etc. |

...无需在单独的文件中手动输入每个TR / TD。我的目标是有一个页面,根据页面名称加载数据,这与{% assign %}中的过滤器相对应:

{% assign departmentname = page.name | remove:"equipment_list_" | remove:".md" %} = results in "network" in this example.

则...

{% assign equipment = site.data.equipment | where:"department",{{departmentname}} | group_by:"devicetype" %}

然后我只运行一个for循环来创建一个组头,然后为该组中的每个项创建一个for循环。

但是,从数据文件中的键标签插入列名超出了我的理解范围。

任何见解都会很棒。我是编程和Jekyll的新手......

1 个答案:

答案 0 :(得分:0)

你没有显示实际的示例代码,但我想你正在做这样的事情,对吗?

<table>
{% for e in site.data.equipment %}
<tr>
    <td>{{e.ip_address}}</td>
    <td>{{e.model}}</td>
    <!-- etc. -->
</tr>
{% endfor %}
</table>

请注意,数据文件中的所有内容是一个对象并具有属性。

您可以循环遍历e.ip_address的属性,而不是明确指定e.modele等。

{% for item in e %}
    ...
{% endfor %}

每个item都是其中一个键值对 - ,其中也包含属性:
item[0]是关键,item[1]是值。

因此,我们可以遍历数据文件并创建仅包含值的表:

<table>
{% for e in site.data.equipment %}
    <tr>
    {% for item in e %}
        <td>{{item[1]}}</td>
    {% endfor %}
    </tr>
{% endfor %}
</table>

...仅在first loop中显示带键的标题行:

<table>
{% for e in site.data.equipment %}
    {% if forloop.first == true %}
    <tr>
    {% for item in e %}
        <th>{{item[0]}}</th>
    {% endfor %}
    </tr>
    {% endif %}
    <tr>
    {% for item in e %}
        <td>{{item[1]}}</td>
    {% endfor %}
    </tr>
{% endfor %}
</table>

最后一个代码示例将生成以下HTML:

<table>
    <tr>
        <th>ip_address</th>
        <th>model</th>
        <th>department</th>
        <th>location</th>
        <th>devicetype</th>
    </tr>
    <tr>
        <td>192.168.0.1</td>
        <td>Netgear Whatever</td>
        <td>network</td>
        <td>Tempe, Arizona</td>
        <td>Router</td>
    </tr>
    <tr>
        <td>192.168.0.2</td>
        <td>T2000</td>
        <td>time travel</td>
        <td>2035</td>
        <td>weaponry</td>
    </tr>
</table>