我的数据文件示例如下:
_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的新手......
答案 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.model
,e
等。
{% 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>