因此,假设您有一个数据库:
品牌|型号|序列号|位置| IP地址|服务日期|等...
要创建列标题,我确定循环中的第一个,然后使用字段[0]为集合中的每个列运行另一个for循环。然后,我在数据上运行另一个for循环,从左到右运行字段[1]数据。
这很好地构建了表。如何通过字段[1]循环并有选择地选择每列?让我们说一页我要展示品牌|型号|序列号,但在另一页我想只包括品牌|型号| IP地址。
到目前为止,我设法做到这一点的唯一方法是在字段内放置一个forloop.index条件for循环来查找{% if forloop.index == 1 and forloop.index == 3 %}
作为示例,等等。这似乎不高效
<table>
{% for item in site.data.equipment %}
{% if forloop.first == true %}
<tr>
{% for field in item %}
<th>{{ field[0] }}</th>
{% endfor %}
</tr>
{% endif %}
{% for item in site.data.equipment %}
<tr>
<td>{{ field[1] }}</td>
</tr>
{% endfor %}
{% endfor %}
</table>
答案 0 :(得分:1)
您可以按索引标识列:
Brand | Model | Serial No | Location | IP Address
1 2 3 4 5
然后,您可以根据简单数组选择打印列。在这个例子中,它存储在页面前端,但也可以在前面_config.yml。
---
# page front matter
# ....
displayCol: [1,2,4]
---
{% assign equipment = site.data.equipment %}
<table>
{% for item in equipment %}
{% if forloop.first == true %}
<tr>
{% for field in item %}
{% if page.displayCol contains forloop.index %}
<th>{{ field[0] }}</th>
{% endif %}
{% endfor %}
</tr>
{% endif %}
<tr>
{% for field in item %}
{% if page.displayCol contains forloop.index %}
<td>{{ field[1] }}</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>
修改:
您还可以使用来自页面逻辑的选择数组,如{% assign displayCol = "1,2,4" | split: "," %}
(从字符串创建数组,这是在页面代码中创建数组的唯一方法),引用为displayCol
而不是page.displayCol
。
问题在于它创建了一个字符串数组:{% assign displayCol = "1,2,4" | split: "," %} => ["1", "2", "4"]
。并且在字符串数组中测试forloop.index(整数)存在是不可行的。
解决方案是将forloop.index强制转换为{% assign indexToStr = forloop.index | append:"" %}
结果代码为:
{% assign equipment = site.data.equipment %}
{% comment %}Here is the setup for displayed columns{% endcomment %}
{% assign displayCol = "1,2,4" | split: "," %}
<table>
{% for item in equipment %}
{% if forloop.first == true %}
<tr>
{% for field in item %}
{% assign indexToStr = forloop.index | append: "" %}
{% if displayCol contains indexToStr %}
<th>{{ field[0] }}</th>
{% endif %}
{% endfor %}
</tr>
{% endif %}
<tr>
{% for field in item %}
{% assign indexToStr = forloop.index | append: "" %}
{% if displayCol contains indexToStr %}
<td>{{ field[1] }}</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>